例如,我有三个类:
public class A{public static void doSth(){}}
public class B{public static void doSth(){}}
public class C{public static void doSth(){}}
然后我有一个变量:
private int controlVariable;
然后根据这个controlVariable的值,我想在上面的不同类中调用doSth()方法。例如:
switch (i)
{
case 1:
A.doSth();
break;
case 2:
B.doSth();
break;
case 3:
C.doSth();
break;
}
但是,使用上述方法非常繁琐。我可以使用变量来存储类的名称。例如:
classNameVariable = A;
classNameVaribale.doSth();
任何人都可以帮我吗?请不要使用继承。
答案 0 :(得分:2)
在Java 8中,您可以使用方法引用:
public class A {
public static void doSth() {
System.out.println("A");
}
}
public class B {
public static void doSth() {
System.out.println("B");
}
}
public class C {
public static void doSth() {
System.out.println("C");
}
}
public class Sample {
public static void main(String[] args) {
Runnable[] methods = { A::doSth, B::doSth, C::doSth };
int controlVariable = 2;
methods[controlVariable].run(); // C
}
}
在此示例中,controlVariable
是基于0
的索引。
答案 1 :(得分:0)
我相信使用A.getClass().getSimpleName()
会返回一个字符串,其中包含源代码中给出的类名。
答案 2 :(得分:0)
您可以使用反射从类名中获取类:
Class cls = Class.forName("your class package");
Method method = cls.getMethod("methodName", arguments);
Object o = method.invoke(null, "whatever");
希望这会对你有所帮助。