本文介紹了將類作為參數(shù)傳遞給方法,然后調(diào)用靜態(tài)方法的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一個使用案例,其中一個類存在于包的兩個版本中。
package packageV1;
public class MyClass extends BaseClass{
public static String example(){
return "Version1";
}
}
package packageV2;
public class MyClass extends BaseClass{
public static String example(){
return "Version2";
}
}
到目前為止(我相信)還不錯。
然后,我有一個使用該類的應用程序,為了避免為不同的包版本重寫應用程序,我希望將應該使用的類(即,用于感興趣的包)作為參數(shù)傳遞給該應用程序。
所以類似于
public class Application{
private Class<BaseClass> selectedClass;
public void Application(Class<BaseClass> selectedClass){
this.selectedClass = selectedClass;
this.selectedClass.example(); // not possible
}
}
我相信如果我在構(gòu)造函數(shù)中傳遞MyClass
的實例,我可以調(diào)用this.selectedClass.example();
,但然后我會通過實例對象調(diào)用靜態(tài)方法,這不是很好嗎?
另一方面,在上面的示例中,selectedClass
是一個Class對象,所以我不能像上面那樣調(diào)用靜態(tài)方法example
。
這是否意味著我應該使用反射?如selectedClass.getMethod(name, parameterTypes)
。
在我看來太復雜了。
還是有更好的設計?
推薦答案
@javadev是對的。使用反射幾乎總是一個非常糟糕的主意。這是一個過于復雜的問題。
這里不需要反思。在實例上調(diào)用靜態(tài)方法的能力很快被意識到是一個設計錯誤。以至于有了后續(xù)的高度非正交性設計選擇,因為它不適用于作為接口成員的靜態(tài)方法。
簡單的解決方案是將靜態(tài)方法移動到無狀態(tài)對象的實例方法。不需要Class
或其他反射。這是策略設計模式的應用。
這篇關(guān)于將類作為參數(shù)傳遞給方法,然后調(diào)用靜態(tài)方法的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,