您的代碼沒有多大意義,因爲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
)的一部分,則它必須是Class.forName("com.example.A")
。
下面是如何結合索蒂里奧斯Delimanolis和我的代碼放到一個完整的工作例如:
class Example {
static class A {
String[] des = { "Hi from class A" };
}
static class B {
String[] des = { "Hi from Class B" };
}
public static void main(String[] args) {
String[] classNames = { "Example$A", "Example$B" }; // inner class names
for (String name : classNames) {
try {
System.out.println(getDes0(name));
} catch (Exception e) {
System.err.println("Could not get des[0] for class " + name);
e.printStackTrace();
}
}
}
private static String getDes0(String className)
throws Exception // better to be explicit, but distracts from the answer
{
Class<?> cls = Class.forName(className);
Field field = cls.getDeclaredField("des");
Object obj = cls.newInstance();
String[] des = (String[]) field.get(obj);
return des[0];
}
}
使用反射,雖然這並不明顯,那就是你要找的。在繼續之前,您可能需要查看Java語法。 –
你可以告訴我使用代碼請 – user2829506
不編輯,如果沒有得到qus..please我想動態給名稱,如果我已經知道它是類「A」爲什麼我會用這個..方法.. huh – user2829506