我有要求,其中,我必須在調用類中的任何靜態方法之前調用一些初始化方法。設計模式,以便在調用靜態方法之前始終調用靜態init方法
現在的問題是,每當我向該類添加新的靜態方法,我忘記調用初始化方法,我想知道是否有任何設計模式來解決這個問題。我希望初始化方法總是在類中調用靜態方法時調用。
我有要求,其中,我必須在調用類中的任何靜態方法之前調用一些初始化方法。設計模式,以便在調用靜態方法之前始終調用靜態init方法
現在的問題是,每當我向該類添加新的靜態方法,我忘記調用初始化方法,我想知道是否有任何設計模式來解決這個問題。我希望初始化方法總是在類中調用靜態方法時調用。
AOP可能是這個問題的矯枉過正。您可能想要嘗試的是將每個靜態方法委派給另一個類,並將初始化代碼添加到該類的構造函數中。像這樣:
class StaticClass {
public static void m1() {
new Worker().m1();
}
public static void m2() {
new Worker().m2();
}
}
class Worker {
public Worker() {
intialize();
}
public void m1() {
// Real m1 work
}
public void m2() {
// Real m2 work
}
}
這atleast解決了忘記投入到init代碼的問題。
也就是說,這看起來像:https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem
你能退一步,告訴我們你爲什麼需要這個?
類似於Spring AOP的東西可以很好地解決Java的這種情況。它使用AspectJ annotations使事情變得更簡單,雖然我個人認爲AOP相當複雜。
Java has static initialization blocks。像這樣的:
public class SomeClass {
static {
// Your code here
}
}
靜態構造函數將被調用一次,我想每次調用構造函數時調用該方法。 – Gainster 2011-04-18 03:42:39
然後你可能想要AspectJ(http://www.eclipse.org/aspectj/)的一些東西,儘管我不知道它是否可以用於靜態方法。 – 2011-04-18 03:44:10