2013-06-04 2 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 (класс 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

Смежные вопросы