2013-06-04 70 views
1

考慮:現場使用間接反射方法

public class A { 
    public int n; 
    public int func(Object arg) {...} 
    ... 
} 

public class B { 
    private A myA; 
    ... 
} 

private B myB; 

myB使用反射我得到的領域myA;我如何訪問class A的成員和方法? 例如,讓我們說我有一個字符串"myA.n"和給定對象myB我需要訪問myA.n

Class<?> c = B.class; // or myB.getClass() 
Field f = c.getField("myA"); 
int p = ???????? // reflection for int p = myA.n; 
int q = ???????? // reflection for int q = myA.func(new Integer(3)); 
+1

'myA.class'不起作用。你需要'myA.getClass();' –

+0

@MarkoTopolnik我有類似的反射**工作代碼**與myA.class。我的代碼實際上是一個'private void myMethod(Class c)'方法,我用'myMethod(myA.class)'調用它。但'getClass()'也可以工作 – ilomambo

+1

除非你有一個名爲* myA的類,這甚至不是有效的Java語法。 –

回答

0

您需要調用Class.getField()和遍歷它們尋找正確的功能。

For (Field field : class.getField()) { 
    if (field.getName().equals("...")) { 
    ... 
    } 
} 

原因是可以有多個字段具有相同的名稱和不同的參數類型(即字段名稱被重載)。

getField()返回類中的公共字段,包括來自超類的公共字段。

+0

你的代碼不會編譯,沒有'class.getField()' – ilomambo

+0

我只是給你一個假設,而不是代碼.. ^^ –

+0

對不起艾哈邁德,我不完全瞭解你。無論如何,這不是一個完整的答案。我想看看如何在我的問題中完全編碼'???????'。 – ilomambo