gpt4 book ai didi

java - 产生错误输出的多级静态嵌套类

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:23 24 4
gpt4 key购买 nike

当运行以下代码时,它会打印 "X.Q"而不是 "A<T>.X.Q"按照语言规范的要求。

    class A<T> {
static class X {
static class Q {
public static void main() {
System.out.println("A<T>.X.Q");
}
}
}
}

class B extends A<B.Y.Q> {
static class Y extends X {
} // X here is inherited from A
}

class X {
static class Q {
public static void main() {
System.out.println("X.Q");
}
}
}

public class Test {
public static void main(String[] args) {
B.Y.Q.main();
}
}

谁能帮我理解这个程序的输出是什么,根据我的理解应该是 "A<T>.X.Q"而不是 "X.Q" , 哪里说错了请指正

最佳答案

您得到 "X.Q" 的原因打印出来的是X指类X作用域为未命名包,而不是 A<T>.X . “外面”没关系X B 之后声明,因为 Java 编译器在解析 B.Y 的名称之前会看到它的基类。

您可以强制继承自 A.X在您的代码中如下所示:

class B extends A<B.Y.Q> {
static class Y extends A.X {
} // ^^
// Add this
}

Demo 1.

编辑:(感谢 user695022 的评论)

奇怪的是,如果外部类不是通用的,问题就会消失:

class A {
static class X {
static class Q {
public static void main() {
System.out.println("A<T>.X.Q");
}
}
}
}

Demo 2.

关于java - 产生错误输出的多级静态嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43852703/

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