我的类正在实现一个返回的超类方法List
.返回的列表是只读的:
public abstract class SuperClass { public abstract ListgetComponents(); }
在我的课堂上,我想返回一个声明为List的字段 - 即一个子列表:
public class SubClass extends SuperClass { private Listbuttons; public List getComponents() { return buttons; } }
这会生成编译器错误,因为List
它不是子类型List
.
我可以理解它为什么不编译,因为不应该允许将JTextField添加到JButton列表中.
但是,由于列表是只读的,因此应该允许"概念上".但是,当然,编译器不知道它是只读的.
有没有办法实现我想要实现的目标,而无需更改超类中的方法声明,以及子类中的字段声明?
谢谢,卡鲁姆
声明getComponents()
为:
public List extends JComponent> getComponents()
我想我找到了我正在寻找的答案......
return Collections.unmodifiableList(buttons);
我曾经尝试过:
return Collections.unmodifiableList(buttons);
但这是类型推断的List
.
放入显式类型参数允许将List
其视为a List
,这是允许的unmodifiableList()
.
我现在很开心;-)而且我已经通过讨论学到了一些东西.
Calum