gpt4 book ai didi

java - 如何强制泛型类型参数成为接口(interface)?

转载 作者:IT老高 更新时间:2023-10-28 20:40:26 25 4
gpt4 key购买 nike

java中有没有办法指定泛型类的类型参数必须是接口(interface)(不仅仅是扩展它!)

我想做的是:

public class MyClass<X extends SomeInterface, Y extends SomeOtherClass & X>

意味着 Y 必须是 SomeOtherClass 的子类并实现 X。我目前通过编译器得到的是

The type X is not an interface; it cannot be specified as a bounded parameter

那么,我如何告诉编译器 X 必须始终是一个接口(interface)?

编辑:
好的,我想我有点过于简化了我的问题。让我们使用我的实际应用程序域来更清楚地说明:

我有一个用于表示图表的 API。 Diagram 包含 NodeEdge 对象。所有这三个类都实现了 Shape 接口(interface)。形状可能有子形状、父形状并属于图表。

问题是,我需要制作这个 API 的两个版本:一个仅具有基本功能的开源版本,另一个具有更多功能的扩展版本。但是,扩展 API 必须只提供方法,返回扩展类型(ExtendedDiagramExtendedNodeExtendedEdge 和(问题来了)<强>扩展形状)。
所以我有这样的事情:

/* 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>{...}
...

/* EXTENDED CLASSES */
public interface ExtendedShape extends Shape<ExtendedShape,ExtendedDiagram> { ... }

public class ExtendedDiagram extends Diagram<ExtendedShape,ExtenedDiagram> implements ExtendedShape { ... }
public class ExtendedEdge extends Edge<ExtendedShape,ExtenedDiagram> implements ExtendedShape { ... }
...

扩展 API 工作正常,基本 API 代码给出一些警告,但主要问题出现在使用基本 API 时:

public class SomeImporter<X extends Shape<X,Y>, Y extends Diagram<X,Y>, E extends Edge<X,Y>>{
private Y diagram;

public void addNewEdge(E newEdge){
diagram.addChildShape(newEdge);
...

最后一行给了我以下警告:

The method addChildShape(X) in the type Diagram is not applicable for the arguments (E)

所以现在,我只想指定 E 也需要实现 X,一切都会好起来的 - 我希望 ;)

所有这些有意义吗?你们知道这样做的方法吗?或者有没有更好的方法来获得具有上述限制的扩展 API?
感谢您的支持,非常感谢您的帮助!

最佳答案

你可以使用:

class Foo<T extends Number & Comparable> {...}

具有一个类型参数 T 的类 Foo。Foo 必须使用 Number 的子类型并实现 Comparable 的类型进行实例化。

关于java - 如何强制泛型类型参数成为接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6061745/

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