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

前端之家收集整理的这篇文章主要介绍了java – 多级静态嵌套类产生错误的输出前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当运行以下代码时,会按照语言规范的要求打印“X.Q”而不是“A @H_403_3@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.在B之后声明“外部”X并不重要,因为Java编译器在解析B.Y的基类的名称之前看到它.

您可以在代码中强制从A.X继承如下:

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

Demo 1.

编辑:(感谢user695022评论)

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

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

Demo 2.

猜你在找的Java相关文章