[英]How to get an anonymous instance that extends a class from a field with java reflection?
我有一個“ S”類,在其中創建從“ T”類派生的匿名類的字段:
class T {
public void foo() {}
}
class S {
T t1 = new T() {};
T t2 = new T() {};
}
我需要遍歷其他S實例的所有T字段以調用“ foo”。 問題是我無法創建實例以傳遞給Field.get(...),因為這是一個匿名類。 如果傳遞T實例,則會收到IllegalArgumentException ...
有機會使其起作用嗎?
編輯
好的,我現在知道我應該將S傳遞給Field.get()。 但是我簡化了,情況有點復雜。 S實際上是一個匿名類:
class SM {
class S {
void bar() {...}
class T {
public void foo() {}
}
}
}
....
SM sm = new SM() {
S s = new S() {
T t1 = new T() {};
T t2 = new T() {};
}
}
我需要訪問S.bar()中的所有T字段。 謝謝!
再次編輯
pff,我當然需要將“ this”傳遞給Field.get()。 謝謝大家,對此感到抱歉,我感到很蠢。
調用field.get(Object)時,需要傳遞一個實例,在該實例上進行調用
S s = new S();
Class<?> sClass = s.getClass();
Field[] fields = sClass.getDeclaredFields();
for(Field field : fields){
if(field.getType().equals(T.class)){
T instance = (T)field.get(s);
instance.foo();
}
}
嗯,真的看不到你的問題。 怎么樣:
S s = new S();
Field t1Field = S.class.getDeclaredField("t1");
t1Field.setAccessible(true);
T t1 = (T)t1Field.get(s);
t1.foo();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.