具有 1 个类型参数和 2 个约束的 Java 泛型

标签 java generics

我知道可以向通用类定义添加多个约束,例如:

class Example<I extends Object & Comparable<Object>>{}

但我想要一个泛型 ( MyGeneric ),它将另一个泛型 ( SomeGeneric<T> ) 作为其类型参数,并约束该泛型(例如 T )的类型参数 ( T extends SomeClass )。

重要的,我需要知道两者的类型 SomeGenericSomeClass从类内部(GT 都需要绑定(bind))。例如,想象这样的事情:

class MyGeneric<G extends SomeGeneric<T>, T extends SomeClass>
{
   public G returnSomeGenericImpl(){}
   public T returnSomeClassImpl(){}
}

问题: 上面的方法有效,但我更希望我的类只有一个类型参数,这样可以让我的类的实现者的生活更轻松。有办法做到这一点吗?

像这样的东西会很好(但这个特定的代码是不正确的):

class MyGeneric<G extends SomeGeneric<T extends SomeClass>>
{
   public G returnSomeGenericImpl(){}
   public T returnSomeClassImpl(){}
}

如果我不清楚,我会很乐意尝试阐明我的意图。

最佳答案

这看起来不可能实现。

通过删除一个类型变量并尝试定义它,将类型定义减少一个顺序后,

class G extends SomeGeneric<T extends SomeClass>{}

无法编译,因为类型参数 T 未绑定(bind)到已定义的类型参数。但是,这有效 -

class G<T extends SomeClass> extends SomeGeneric<T>{}

因此,我推断使用两种类型进行参数化的唯一方法是预先声明它们。

关于具有 1 个类型参数和 2 个约束的 Java 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16564373/

相关文章:

c# - 如何在 C# 中实例化具有抽象约束的泛型类

java - 如何避免使用 Java 生成 XML 时出现多余的空行?

java - 单击 PLAY 按钮 1 次时如何逐个播放所有音频文件

java - SSL 握手失败 Websphere 1 of 2 servers

java - 变量(函数类型)参数计数和变量返回类型

ios - Swift 中的泛型和 ViewModel

java - 为什么 Java 泛型类型推断会在链式方法调用中中断?

java: 当 SomeClass 实现 SomeInterface 时从 List<SomeClass> 转换为 List<SomeInterface>

java - 如何在 Java 中从另一个数据帧平面映射一个数据帧?

java - Java8中带注解的继承