如何在Java中的变量中存储类的名称

时间:2015-03-14 03:24:13

标签: java

例如,我有三个类:

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();

任何人都可以帮我吗?请不要使用继承。

3 个答案:

答案 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");

希望这会对你有所帮助。