(Java)如何使用有界通配符泛型实现接口方法?
我维护两个具有相同功能的项目,并将此功能整合到一个commons项目中。我定义了一个接口:(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我认为这本身就是一个复杂的问题。您的图有一个列表
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>