gpt4 book ai didi

java - 通用类型和接口(interface) Java

转载 作者:行者123 更新时间:2023-11-29 05:36:12 25 4
gpt4 key购买 nike

有了这些类和接口(interface)..

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 , Eclipse 仍然要求让 MyClass实现 ShapeCollection< Shape>自从它实现了 ShapeCollection< Line> 以来它已经这样做了蜜蜂Line Shape 的扩展.我试过改成ShapeCollection< T extends Shape>没有结果。任何帮助将不胜感激。

最佳答案

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

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

在使用它时,如果我按字面意思阅读您的问题,您正在尝试添加 MyClassList<ShapeCollection<Shape>> ,但是 MyClass不是 Shape 的集合但是 Line 的集合和 Line延伸Shape , 你必须使用 ? extends Shape作为类型,而不是 Shape :

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

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

关于java - 通用类型和接口(interface) Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19466519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com