在 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 中实现时创建了这个问题。


哈士奇WWW
浏览 205回答 1
1回答

冉冉说

这是一个具体类型的示例,它既有效又开始暗示可能的用例(某种注册)。该类型既像某种类型的实例,又像该类型所有实例的容器。public class WeirdEnum extends AbstractList<WeirdEnum> {&nbsp; private static List<WeirdEnum> underlyingList = new ArrayList<>();&nbsp; @Override&nbsp; public WeirdEnum get(int index) { return underlyingList.get(index); }&nbsp; @Override&nbsp; public int size() { return underlyingList.size(); }&nbsp; static <T extends List<T>> List<T> getAList() {&nbsp; &nbsp; return Collections.emptyList();&nbsp; }&nbsp; public WeirdEnum() {&nbsp; &nbsp; underlyingList.add(this); // Sufficient for our example but not a good idea due to concurrency concerns.&nbsp; }&nbsp; static List<WeirdEnum> foo = WeirdEnum.getAList();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java