2
我想了解反思如何與嵌套對象的領域:Java反射 - 訪問現場
這裏是ClassA的
public class ClassA {
Integer A;
Integer B;
List<ClassB> C;
public Integer getA() {
return A;
}
public void setA(Integer a) {
A = a;
}
public Integer getB() {
return B;
}
public void setB(Integer b) {
B = b;
}
public List<ClassB> getC() {
return C;
}
public void setC(List<ClassB> c) {
C = c;
}
}
ClassB的:
public class ClassB {
int a ;
int b;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
}
,我試圖訪問這樣的字段:
public static void main(String[] args){
ClassA classA=new ClassA();
Field[] fields =classA.getClass().getDeclaredFields();
for (Field field : fields) {
System.out.println(field.getName());
}
}
問題:我想訪問ClassB的領域,我試圖做這樣的事情:
fields[2].getType().getDeclaredFields();
但getType()返回接口java.util.List中這是事實,但我瞄準成員/ ClassB的
的領域然後我嘗試: fields[2].getGenericType()
返回的java.util.List 並在調試模式下,我可以看到它返回ParameterizedTypeImpl,但我沒有申報,並獲取actualTypeArguments。
不知何故,當我聲明parameterizedTypeImpl時會出現編譯問題。
ParameterizedTypeImpl impl=fields[2].getGenericType();
ParameterizedTypeImpl不能解析爲一個類型
任何指針或幫助將不勝感激。
UPDATE:
我找到了解決辦法:
for (Field field : fields) {
if(field.getType().getTypeName().equalsIgnoreCase("java.util.List")){
ParameterizedType impl=(ParameterizedType) field .getGenericType();
String nameOfClass=impl.getActualTypeArguments()[0].getTypeName();
}
感謝您的幫助球員。
只是快速回顧一下,您正在訪問'List',您仍然需要迭代它以獲取'ClassB'的實例。 – AxelH
@AxelH是的,這對我來說很清楚。謝謝指出。 – Roxy
請不要說「不知何故,它會產生編譯問題」。如果它在編譯時給你一個錯誤,請顯示你嘗試的代碼並告訴我們錯誤是什麼。不要隱藏我們的重要信息。 – ajb