gpt4 book ai didi

Java泛型类型问题

转载 作者:行者123 更新时间:2023-12-02 01:42:59 27 4
gpt4 key购买 nike

考虑以下简化示例:

package com.test;

class B<S> {
B(Class<S> clazz) {}
}

class A<T> {
class SubB extends B<SubB> {
SubB() {
super(SubB.class);
}
}
}

虽然 IntelliJ 没有显示任何错误(当存在编译错误时通常会出现这种情况),但启动程序时的实际编译以位于 super(SubB.class); 的错误结束。 :

Error:(8, 23) java: incompatible types: java.lang.Class<com.test.A.SubB> cannot be converted to java.lang.Class<com.test.A<T>.SubB>

我很好奇,为什么会出现这种情况?我该如何解决这个问题?

编译是使用 AdoptOpenJDK 11 完成的。

最佳答案

这种行为的原因有点复杂。考虑java.util.List.class ,其类型为 Class<java.util.List> ,不是Class<java.util.List<?>> 。这是类文字的限制。

在您的示例中,SubB.class类型为 Class<com.test.A.SubB> ,再次使用 SubB 的原始类型。但构造函数需要某种类型的 Class<com.test.A<T>.SubB> .

这就是为什么我们需要将文字转换为所需的类型:

super((Class<SubB>) (Class<?>) SubB.class);

这将产生警告,但快速检查将表明没有什么可担心的。

关于Java泛型类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60248110/

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