我知道可以向通用类定义添加多个约束,例如:
class Example<I extends Object & Comparable<Object>>{}
但我想要一个泛型 ( MyGeneric
),它将另一个泛型 ( SomeGeneric<T>
) 作为其类型参数,并约束该泛型(例如 T
)的类型参数 ( T extends SomeClass
)。
重要的,我需要知道两者的类型 SomeGeneric
和 SomeClass
从类内部(G
和 T
都需要绑定(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/