为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 中使用自引用泛型类型

在 Java 中使用自引用泛型类型

哈士奇WWW 2023-03-09 15:28:56
考虑以下 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 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

这是一个具体类型的示例,它既有效又开始暗示可能的用例(某种注册)。该类型既像某种类型的实例,又像该类型所有实例的容器。


public class WeirdEnum extends AbstractList<WeirdEnum> {


  private static List<WeirdEnum> underlyingList = new ArrayList<>();


  @Override

  public WeirdEnum get(int index) { return underlyingList.get(index); }


  @Override

  public int size() { return underlyingList.size(); }


  static <T extends List<T>> List<T> getAList() {

    return Collections.emptyList();

  }


  public WeirdEnum() {

    underlyingList.add(this); // Sufficient for our example but not a good idea due to concurrency concerns.

  }


  static List<WeirdEnum> foo = WeirdEnum.getAList();

}


查看完整回答
反对 回复 2023-03-09
  • 1 回答
  • 0 关注
  • 204 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号