gpt4 book ai didi

java - 使用泛型编译失败?

转载 作者:行者123 更新时间:2023-12-02 18:17:45 24 4
gpt4 key购买 nike

我编写了以下代码,它运行得非常好。问题是当我从 A 更改类(class)时到泛型 A<T>然后编译失败。

public class A {
class B {
}

static void m(B i) {
}

static class C extends B {
C() {
new A().super();
}

}
}

当我改变AA<T>编译失败,并在 B 上出现以下错误.

Cannot make a static reference to the non-static type B

public class A<T> {
class B {
}

static void m(B i) {
}

static class C extends B {
C() {
new A().super();
}
}
}

有人可以告诉我为什么它在第一种情况下工作正常而在第二种情况下失败

最佳答案

在一般情况下,当您引用B时,您实际上指的是 A<T>.B 的实例.

除非您有 A<T> 的封闭实例,您实际上是在尝试包含对 A 的原始引用。这是不允许的,因为 B想要引用与其封闭实例关联的类型变量,但该实例不存在。

在非泛型情况下,没有类型变量,因此B并不是试图引用不存在的东西。

最简单的解决方案是添加 A<T>明确地,例如

static void m(A<?>.B obj)

static <T> void m(A<T>.B obj)

static class C<T> extends A<T>.B {
C() {
new A<T>().super();
}
}

关于java - 使用泛型编译失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43677752/

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