当前位置: 首页 > 面试题库 >

Java注释无法从上层类访问受保护的静态字段

习高格
2023-03-14
问题内容

此代码有效吗?

public abstract class A {
   protected static final String c = "my const";
}

@myAnnotation(value=A.c)
public class B extends A {

}

Eclipse使用JDK 1.6.0.23的用户可以接受此操作,但是Maven使用JDK 1.6.0.23的2.2.1可以显示以下编译错误:

c在A中具有受保护的访问


问题答案:

我想我知道这里发生了什么。注释的实例实际上是具有唯一静态初始化程序的接口。注释规范在顶部添加的唯一内容是语法糖和方法,类或字段的链接。因此,当您键入时value=c.A,几乎就像在注解中添加了静态初始化器一样。注释不是A的子类,因此访问被拒绝。受保护的访问包括程序包访问,因此,当您将A与B移到同一程序包中时,注释也与A在同一程序包中。它可以访问。很好的问题,我认为两个编译器的行为应该相同。我认为Eclipse将允许您自定义将其视为错误的内容,因此您也许可以使他们同意都使用不良的,限制性更强的行为。



 类似资料:
  • 问题内容: 通读“用Java思考”,我陷入了《内部类》一章的ex:6。 练习6:(2)在自己的程序包中使用至少一种方法创建一个接口。在单独的程序包中创建一个类。添加一个实现该接口的受保护的内部类。在第三个包中,从您的类继承,并在方法内部,返回受保护的内部类的对象,并在返回期间向上转换到接口。 这是我的代码: IOne.java 接口 COne.java 具有实现接口的受保护内部类的类 CTwo.j

  • 我正在阅读这本Java SCJP的书,我偶然发现了以下内容: 但是我得到了这个错误: 那么,出什么问题了?

  • 问题内容: 在下面的代码中,Consumer类可以访问Parent类的受保护方法。由于Parent和Consumer类之间没有关系,这怎么可能。 谢谢 问题答案: 表示:相同的包或通过继承。由于您的课程都在(实际上不建议使用),因此可以进行访问。顺便说一句:如果您尝试测试Java访问控制,则会忘记(= no修饰符= )。 另一方面,访问是指:从该特定类(以及仍然是主机类成员的非静态内部类)之外的任

  • 问题内容: 我想对此进行一些讨论,但无法推断出我的情况的答案。仍然需要帮助。 这是我的代码: 在上面的示例中,下面的一些定义似乎令人困惑: 问题: 为什么我不能从子类实例(对象)访问受保护的成员()? 问题答案: 作为声明类的子类的其他包中的类只能访问其自己的继承成员。 …但不是其他对象的继承成员。

  • 问题内容: 我有两节课。 类具有受保护的方法,是的实例。 Class 与class在同一包中。 我正在尝试访问,但正在获取… 怎么了? 问题答案: 编译器应该捕获这样的错误。当您显然在运行时得到此消息时,发生了一些奇怪的事情。可能您已更改了源代码,但已完全重新编译。 另一个潜在但晦涩的问题是通过不同的类加载器加载类。即使包名称相同,从不同的类加载器加载的类也将位于不同的包中(以与由不同的类加载器加

  • 从quarkus集装箱码头,我可以使用以下命令访问keycloak服务器 返回200状态;但无法访问受保护的资源。 我在这里做错了什么?