我需要在变量中存储对类的引用,以便可以在变量上调用该类的静态方法。
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。
有人可以帮忙吗?
答案 0 :(得分:4)
这没有道理。
您可以写
private static SomeClass cls = null;
(或保留未分配状态,因为默认值始终为null
)
和
cls.doSomething()
不会抛出NullPointerException
,而是会调用静态方法。
但是,没有理由这样做。无论您为cls
变量分配什么内容,它都将始终调用SomeClass.doSomething()
,因此消除该变量并仅调用SomeClass.doSomething()
更为有意义。
想法是cls可以根据上面代码中未提供的某些条件引用多个类
这个想法行不通。 cls
变量的编译时间类型将确定所调用的static
方法的类。由于它只能具有单一类型,因此它将始终是相同的static
方法。
答案 1 :(得分:0)
您可以将反射用于此要求。下面是示例:
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);
}
}