2014-07-19 5 views
0

Привет Я в ситуации, когда у меня есть доступ к классу House Который расширяет Foundation (Обратите внимание, что имена классов являются гипотетическими). И у меня есть объект типа House, я хотел бы получить поле Foundation.width которое настроено как личное. Я пришел с кодом:Отражение - Кастинг объекта к нему неизвестно Суперкласс на лету?

1.) Field list = houseObject.getClass().getSuperclass() 
            .getDeclaredField("width"); 
2.) list.setAccessible(true); 
3.) this.width = (double)list.get(foundationObject); 

Проблема с линии № 3 у меня нет доступа к foundationObject, у меня есть доступ к houseObject, и так как я действительно не знаю Класс Фонда в время компиляции я не могу отличить (Foundation)foundationObject.

Есть ли решение для этого? Спасибо за помощь.


Лучший способ сформулировать этот вопрос также может быть: Могу ли я получить нестатический объект типа Суперкласс из объекта?

+1

Почему вы не пытаетесь list.get (houseObject)? Я предполагаю, что изменение доступности будет каскадным для подклассов. –

+0

Это работает, спасибо. Сообщение как ответ И я соглашусь. – snocavotia

+0

Я добавил ответ –

ответ

1

Попытка list.get(houseObject) Изменение доступности будет каскадом к подклассам, и, следовательно, поле будет доступно непосредственно от houseObject.

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