散列集,用于存储某些类JAVA的子类

时间:2013-06-09 10:04:25

标签: java generics hashset

考虑以下情况:

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类型 - TomatoCucumber,如果我只想要任何蔬菜?

我宁愿不使用任何演员...

1 个答案:

答案 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),则需要进行强制转换。