![](/img/trans.png)
[英]Why is PrintStream class reference declared as a static variable in System class in java?
[英]Java: Store reference to static class is variable
我需要將對類的引用存儲在變量中,以便可以在變量上調用該類的靜態方法。
Main.java
public class Main {
private static SomeClass cls;
private static void main(String[] args) {
**cls = SomeClass;**
cls.doSomething();
}
SomeClass.java
public class SomeClass() {
public static doSomething() {
}
}
cls = SomeClass在這里不起作用,但是我也不想實例化SomeClass。
有人可以幫忙嗎?
這是沒有道理的。
你可以寫
private static SomeClass cls = null;
(或將其保留為未分配狀態,因為默認值始終為null
)
和
cls.doSomething()
將不會拋出NullPointerException
並將調用靜態方法。
但是,沒有理由這樣做。 無論您為cls
變量分配什么內容,它都將始終調用SomeClass.doSomething()
,因此消除該變量並僅調用SomeClass.doSomething()
更為有意義。
想法是,cls可以根據上面代碼中未提供的某些條件引用多個類
這個想法行不通。 cls
變量的編譯時間類型將確定所調用的static
方法的類。 由於它只能具有單個類型,因此它將始終是相同的static
方法。
您可以將反射用於此要求。 下面是示例:
public class Reference {
public static Class clazz = null;
public static void main(String[] args) {
try {
refer(Something.class);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void refer(Class clazzToBeCalled) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
clazz = clazzToBeCalled; //No need to store it on class level
Method methodToBeCalled = clazz.getMethod("doSomething");
methodToBeCalled.invoke(null);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.