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

tan*_*nia 5 java generics hashset

考虑以下情况:

public abstract class Vegetable {};

public class Tomato extends Vegetable {};
public class Cucumber extends Vegetable {};

public class Orange {};
Run Code Online (Sandbox Code Playgroud)

关键是 - 我希望我HashSet只存储扩展的内容Vegetable,我该怎么做?这应该很简单..

但是Set <? extends Vegetable> () hs = new HashSet <? extends Vegetable> ();,当然,这不是一个有效的结构,Java要我指定Set我想要的类型- Tomato或者Cucumber,如果我只想要任何蔬菜,该怎么办?

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

das*_*ght 8

当你创建

Set<SomeType> = new HashSet<SomeType>();
Run Code Online (Sandbox Code Playgroud)

该集合能够存储属于其子类的对象SomeType.在您的情况下,您只需要

Set<Vegetable> set = new HashSet<Vegetable>();
Run Code Online (Sandbox Code Playgroud)

你现在可以这样做:

set.add(new Tomato());
set.add(new Cucumber());
Run Code Online (Sandbox Code Playgroud)

这样做会触发编译错误:

set.add(new Orange()); // Does not compile
Run Code Online (Sandbox Code Playgroud)

对于演员来说,你不需要在他们的路上投射物体set.但是,如果Vegetable在检索时需要特定类型(即不简单),则需要进行强制转换.