大家好,我想知道如何使用字符串项来调用类,例如
class A {
String[] des = { "hi" };
}
class Example {
public static void main(String[] args) {
String[] className = { "A", "B" };
System.out.println(className.des[0]); // i wanted to call des array in
// a class with index equal to 0
}
}
从上面你可以解释我希望在运行时将字符串内容用作类调用者。是否有可能..(我必须使用String)
答案 0 :(得分:0)
您的代码没有多大意义,因为des
不是String
数组className
的字段。但是,看起来您正在尝试访问类A
中声明的字段,只需将类的名称作为String
值即可。由于des
是一个实例字段,因此您需要使用A
的实例。你可以这样做:
A a = (A) (Class.forName("A").newInstance());
System.out.println(a.des[0]);
您必须添加代码来处理可能引发的潜在异常。另请注意,Class.forName
的参数必须是类的全名,因此如果A
是包的一部分(比如com.example
),那么它必须是{{} 1}}。
以下是如何将Sotirios Delimanolis和我的代码组合成一个完整的工作示例:
Class.forName("com.example.A")
答案 1 :(得分:0)
我会后悔向你展示这个,但仅仅是为了踢球
String className = "A"; // use the fully qualified name
Class clazz = Class.forName(className);
Field field = clazz.getDeclaredField("des");
field.setAccessible(true);
A a = new A(); // if you don't know the actual type, you can declare it as Object and get it from somewhere
String[] des = (String[])field.get(a);
System.out.println(des[0]);
显然,相应地进行所有异常处理。