5

考虑以下情况:

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,如果我只想要任何蔬菜怎么办?

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

4

1 回答 1

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

于 2013-06-09T10:09:50.307 回答