gpt4 book ai didi

涉及 Class

转载 作者:搜寻专家 更新时间:2023-11-01 02:30:27 26 4
gpt4 key购买 nike

这个程序不编译:

public class xx {
static class Class1<C> {
void method1(C p) {
}
}
static class Class2<T> extends Class1<Class<? extends T>> {
T object;
void method2() {
this.method1(this.object.getClass());
}
}
}

错误是:

xx.java:10: method1(java.lang.Class<? extends T>) in xx.Class1<java.lang.Class<? extends T>>
cannot be applied to (java.lang.Class<capture#215 of ? extends java.lang.Object>)
this.method1(this.object.getClass());

为什么会这样?为什么编译器似乎相信 object.getClass()返回 Class<? extends Object>而不是 Class<? extends T>

最佳答案

T 没有设置上限在你的代码中,所以 ? extends T真的等于? extends Object .就在昨天,我玩了一个类似的例子并遇到了这个障碍。我有

static <T> T newInstance(T o) throws Exception {
final Class<? extends T> c = o.getClass();
return c.newInstance();
}

它提示同样的错误。考虑一下:Object.getClass() 的返回类型是Class<?>并且编译器将要捕获 ?变成一个具体的类型。但是相反,我们不想捕获 ?。 , 但要“捕获上限” T -- 在 Java 的泛型中没有这样的东西。

关于涉及 Class<? 的 Java 泛型编译错误延伸 T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10744274/

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