在Java中使用自引用泛型类型
考虑下面的java方法:
<T extends List<T>> List<T> getMyList() {
return Collections.emptyList();
}
我可以将其输出分配给原始类型的变量,如下所示:
List x = getMyList();
List<List> y = getMyList();
但是,我想不出任何方法将其输出分配给完全参数化的类型。特别是,我想不出一个非原始的、具体的类型T
能够满足List<T> z = getMyList();
我们能创建这样一个T
吗?
若否,原因为何
关于上下文,我在试图理解如何在Java中实现枚举时提出了这个问题
# 1 楼答案
下面是一个具体类型的示例,它既有效,又开始暗示可能的用例(某种类型的注册)。类型组合的作用既像某个类型的实例,又像该类型的所有实例的容器
# 2 楼答案
Java中的每个枚举都从基本枚举类
Enum<T extends Enum<T>>
扩展而来,其中T
是实现枚举的实际类型在编写
SomeClass<T extends SomeClass<T>>
时,可以强制执行类型参数始终是实现类本身假设你有这个界面:
这个实现类:
在
MyClass
中,除了MyClass
本身之外,不可能使用任何其他类型参数# 3 楼答案
不确定我是否完全理解你的问题,但举个例子: