Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Java)如何使用有界通配符泛型实现接口方法?_Java_Generics_Bounded Wildcard - Fatal编程技术网

(Java)如何使用有界通配符泛型实现接口方法?

(Java)如何使用有界通配符泛型实现接口方法?,java,generics,bounded-wildcard,Java,Generics,Bounded Wildcard,我维护两个具有相同功能的项目,并将此功能整合到一个commons项目中。我定义了一个接口: public interface GraphData { public List<? extends ShapeData> getShapes(); public void setShapes( List<? extends ShapeData> shapes ); } 公共接口图形数据 { public List我认为这本身就是一个复杂的问题。您的图有一个列表

我维护两个具有相同功能的项目,并将此功能整合到一个commons项目中。我定义了一个接口:

public interface GraphData 
{
    public List<? extends ShapeData> getShapes();
    public void setShapes( List<? extends ShapeData> shapes );
}
公共接口图形数据
{

public List我认为这本身就是一个复杂的问题。您的
有一个
列表
;获取并设置该类型

public interface GraphData 
{
    public List<Shape> getShapes();
    public void setShapes(List<Shape> shapes );
}
公共接口图形数据
{
公共列表getShapes();
公共无效设置形状(列表形状);
}

我通常在接口中没有getter/setter。这不是很有意义或有趣的行为。我甚至不同意
图形
需要一个接口。你可能想想想你想要实现什么。

基本上,你的接口太宽了。你已经指定了
形状
(顺便说一句,这是一个公共字段-为什么?)必须是一个
列表
。如果有人将错误类型的列表传递到
设置形状
,您预计会发生什么情况?例如:

public class BadShapeData implements ShapeData { ... }

...

List<BadShapeData> badShapes = new ArrayList<BadShapeData>();
new Graph().setShapes(badShapes);
然后:

公共类图实现GraphData

或者,您可以将接口更改为没有setter。您真的需要它吗?该接口真的增加了很多好处吗?除了一个属性之外,您不能对它提供更有意义的操作吗?

在哪一行出现错误?您不能在我的初始帖子上分配一个
列表让我展开。中的GraphData和ShapeData接口位于我的commons项目中。依赖于我的新commons项目的两个项目具有ShapeData子类型的形状类。getShapes对于这两个形状类都是通用的,但是每个形状类中都有特定于项目的功能。因此,形状对象在我的commons项目中不存在,我无法定义ine简单的getter和setter(即List getShapes()和setShapes(List shapes))。
public class BadShapeData implements ShapeData { ... }

...

List<BadShapeData> badShapes = new ArrayList<BadShapeData>();
new Graph().setShapes(badShapes);
public interface GraphData<T extends ShapeData>
{
    List<T> getShapes();
    void setShapes(List<T> shapes);
}
public class Graph implements GraphData<Shape>