gpt4 book ai didi

eclipse - Eclipse 编译器或 javac 中的错误?

转载 作者:行者123 更新时间:2023-12-04 10:06:21 25 4
gpt4 key购买 nike

谁是对的? Eclipse 还是 javac?

--------------- c/v/A.java ---------------

package c.v;
public class A<T> {
}

--------------- c/v/B.java ---------------
package c.v;
public class B extends A<B.Secret> {
private class Secret {};
}

Eclipse 编译 B.java 就好了。

Javac 有问题。

$ javac c/v/B.javac/v/B.java:3: c.v.B.Secret has private access in c.v.Bpublic class B extends A<B.Secret> {                           ^    1 error

最佳答案

Java Language Specification的相关部分一定是:

§8.1.4:
[...] ClassType 必须命名一个可访问的(第 6.6 节)类类型,否则会发生编译时错误。

§6.6.1:
[...]
引用(类、接口(interface)或数组)类型的成员(类、接口(interface)、字段或方法)或类类型的构造函数只有在类型可访问并且声明成员或构造函数允许访问时才可访问:

  • 如果成员或构造函数声明为 public,则允许访问。接口(interface)的所有成员都是隐式公共(public)的。
    [...]
  • 否则,如果成员或构造函数被声明为私有(private),则当且仅当它发生在包含成员或构造函数声明的顶级类(第 7.6 节)的主体内时,才允许访问。

  • 因此,由于 ClassType 不在类的主体内, B.Secret在此位置无法访问,因此 A<B.Secret>不可访问,因此应该发生编译时错误。

    关于eclipse - Eclipse 编译器或 javac 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757623/

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