有没有一种方法在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)