小编Phi*_*hke的帖子

如何强制泛型类型参数作为接口?

有没有一种方法在java中指定,泛型类的类型参数必须是一个接口(而不仅仅是扩展它!)

我想做的是以下内容:

public class MyClass<X extends SomeInterface, Y extends SomeOtherClass & X>
Run Code Online (Sandbox Code Playgroud)

这意味着Y必须是SomeOtherClass的子类并实现X.编译器目前得到的是

X型不是界面; 它不能指定为有界参数

那么,我怎样才能告诉编译器X必须始终是一个接口?

编辑:
好的,我想我稍微简化了我的问题.让我们使用我的实际应用程序域来使其更清晰:

我有一个用于表示图表的API.一包含节点边缘对象.所有这三个类都实现了Shape接口.形状可以具有子形状,父形状并且属于图形.

问题是,我需要制作这个API的两个版本:一个只具有基本功能的开源和一个具有更多功能的扩展版本.但是,扩展API必须只提供返回扩展类型的方法(ExtendedDiagram,ExtendedNode,ExtendedEdge和(此处出现问题)ExtendedShape).
所以我有这样的事情:

/* BASIC CLASSES */
public interface Shape<X extends Shape<X,Y>, Y extends Diagram<X,Y>>{
    public List<X> getChildShapes();
    public X getParent();
    public Y getDiagram();
    ...
}

public class Diagram<X extends Shape<X,Y>, Y extends Diagram<X,Y>> implements Shape<X,Y>{...}
public class Edge<X extends Shape<X,Y>, Y extends Diagram<X,Y>> implements Shape<X,Y>{...} …
Run Code Online (Sandbox Code Playgroud)

java generics interface

44
推荐指数
3
解决办法
2万
查看次数

标签 统计

generics ×1

interface ×1

java ×1