考虑以下情况:
public abstract class Vegetable {};
public class Tomato extends Vegetable {};
public class Cucumber extends Vegetable {};
public class Orange {};
关键是 - 我希望我的HashSet
只存储展开Vegetable
的内容,我该怎么做?这应该很简单..
..但Set <? extends Vegetable> () hs = new HashSet <? extends Vegetable> ();
当然不是一个有效的结构,Java希望我指定我想要的Set
类型 - Tomato
或Cucumber
,如果我只想要任何蔬菜?
我宁愿不使用任何演员...
答案 0 :(得分:8)
创建时
Set<SomeType> = new HashSet<SomeType>();
该集合能够存储属于SomeType
的任何子类的对象。在您的情况下,您只需要
Set<Vegetable> set = new HashSet<Vegetable>();
你现在可以这样做:
set.add(new Tomato());
set.add(new Cucumber());
执行此操作将触发编译错误:
set.add(new Orange()); // Does not compile
就演员而言,你不需要在进入set
的途中投射物品。但是,如果您在检索时需要特定类型(即不仅仅是Vegetable
),则需要进行强制转换。