2013-05-24 3 views
-2

У меня есть эта структура классов:Java генериков с наследованием

public class NFAddress 

public class NFAddresses<T extends NFAddress> extends ArrayList<NFAddress> 

public class NFMutableAddress extends NFAddress 

public class NFMutableAddresses<T extends NFMutableAddress> extends NFAddresses<NFMutableAddress> 

При попытке получить доступ к объектам в NFMutableAddresses

для (NFMutableAddress nucleusAddress: это) { объекта определяются как NFAddress и не NFMutableAddress }

Благодарим за помощь.

+1

Что вы пытаетесь сделать? – Makky

+3

В чем вопрос? – buc

+0

почти нет причин для расширения ArrayList –

ответ

3

Попробуйте эти определения классов вместо:

public class NFAdressess<T extends NFAddress> extends ArrayList<T> 
public class NFMutableAddresses<T extends NFMutableAddress> extends NFAddresses<T> 

Что изменилось по сравнению с вашими классами является то, что общий параметр T пересылается класс расширяется. Этот параметр T может быть любым, что (в первом случае) расширяет NFAddress (так что это может быть NFMutableAddress или что-нибудь еще, что расширяет любой из этих двух).

+0

При использовании this.add() я могу на самом деле передать T beaucause, он расширяет ArrayList . См. Код там http://pastebin.com/THEfzACV –

+0

На самом деле я нашел, как это сделать: 'this.add ((T) new NFAddress());' –

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