1

拥有这些类和接口..

public interface Shape;

public interface Line extends Shape

public interface ShapeCollection< Shape>

public class MyClass implements ShapeCollection< Line>

List< ShapeCollection< Shape>> shapeCollections = new LinkedList< ShapeCollection< Shape>>();

当我尝试MyClass向. shapeCollections_ MyClass_ ShapeCollection< Shape>_ 我试图更改为没有结果。任何帮助将非常感激。ShapeCollection< Line>LineShapeShapeCollection< T extends Shape>

4

2 回答 2

2

您已经声明了名称Shape等的类型参数Line。您还没有声明绑定。也就是说,这两个声明是相同的:

public interface ShapeCollection<Shape> // generic parameter called Shape
public interface ShapeCollection<T>  // generic parameter called T

但你想要的是:

public interface ShapeCollection<T extends Shape> // generic parameter bound to Shape

在使用它时,如果我从字面上阅读您的问题,您正试图将 a 添加MyClass到 a List<ShapeCollection<Shape>>,但MyClass不是一个集合,Shape而是一个LineLineextends的集合Shape,您必须将? extends Shape其用作类型,而不是Shape

List<ShapeCollection<? extends Shape>> shapeCollections = new LinkedList<ShapeCollection<? extends Shape>>();
shapeCollections.add(new MyClass()); // should work

这是因为Collection<Line>不是的子类Collection<Shape>泛型不像类层次结构。

于 2013-10-19T13:50:16.690 回答
1

根据您提出的声明MyClass不执行ShapeCollection<Line>。即使它发生了,也没关系。您只能放置扩展的东西,Shape而不能放置扩展的东西ShapeCollection<Shape>

于 2013-10-19T13:45:38.137 回答