【发布时间】:2011-02-05 19:40:53
【问题描述】:
假设我有类 Foo 扩展了超类。我明白为什么我不能这样做:
List<Foo> fooList = getFooList();
List<Superclass> supList = fooList;
但是,如果 supList 以某种方式“只读”,我这样做似乎是合理的。然后,一切都将是一致的,因为从 objList 中出来的一切都是 Foo,它是一个超类。
我可能会编写一个 List 实现,它接受一个底层列表和一个更通用的类型参数,然后将所有内容作为更通用的类型而不是特定类型返回。它的作用类似于Collections.unmodifiableList() 的返回,只是类型会更通用。
有没有更简单的方法?
我正在考虑这样做的原因是我正在实现一个接口,该接口要求我返回一个(不可修改的)List
【问题讨论】:
-
能否修改界面返回
List<? extends Superclass>?然后它就可以工作了,你不能将东西添加到? extends X列表中。 -
@mmyers:是的,我能做到。如此简单,但不知何故,它从未在我的脑海中出现。如果你想要信用,写下来作为答案,我会选择它。