gpt4 book ai didi

Java 模板类无法编译

转载 作者:行者123 更新时间:2023-12-01 22:41:48 25 4
gpt4 key购买 nike

我有一个 LList 类,它表示类型 T 的元素的特定集合。该类有一个静态方法“empty()”和方法“ins”

public static <T> LList0<T> empty() {    
LList0<T> emptyLList0 = new LList0<T>();
emptyLList0.init = true;
emptyLList0.list = null;
emptyLList0.rest = null;
emptyLList0.name = "empty";
return emptyLList0;
}

public LList0<T> ins(T o) {
LList0<T> c = new LList0<T>();
c.list = new Vector<T>();
c.list.add(o);
c.rest = this;
c.init = true;
return c;
}

不明白为什么

LList0<?> s4 = LList0.empty().ins(1).ins(2).ins(3);

有效,但是

LList0<Integer> s4 = LList0.empty().ins(1).ins(2).ins(3);

不起作用

为什么在第一种情况下编译器会知道在第二种情况下将整数相加会给出错误?

type mismatch: cannot convert from LList<Object> to LList<Integer>

最佳答案

问题1

public static <T> LList0<T> empty()

即使您的静态方法中有 T,也在您的 LList0 类中,这两个 T 也是不同的。静态方法中的通用 T 隐藏(不使用)类中的 T。也就是说,返回的 LList0 对象具有泛型类型 X。你给了他们相同的T,这真的很令人困惑。这就是为什么你的第一行有效,但第二行无效。请记住,如果您为类声明了泛型类型 A,为其静态方法声明了 BAB 彼此无关,即使您将两者都命名为 T!

问题2

即使您解决了泛型类型问题,您的方法也不会按您的预期工作。因为每次调用 inc() 时,如果调用 ...inc(1).inc(2),该方法都会生成一个新的 LList0 对象。 inc(3),返回的LList0只有一个元素:3

关于Java 模板类无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26013134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com