java - 为什么不能通过反射访问公共(public)构造函数

标签 java reflection class-visibility

执行以下代码时我很困惑:

@Test
public void testAccessible() throws NoSuchMethodException {
    Constructor<LinkedList> constructor = LinkedList.class.getConstructor();
    Assert.assertTrue(constructor.isAccessible());
}

断言失败,但 LinkedList 类具有 public 默认构造函数。那么为什么 isAccessible() 返回 false?

最佳答案

您可以使用 getModifiers() 方法来确定可访问性/修饰符,isAccessible() 的存在用于不同的目的。

浏览 java 中 Modifiers 类的文档。 [ Link]它具有确定类成员可见性所必需的方法。

isAccessible 允许反射 API 在运行时访问任何成员。通过调用 Field.setAcessible(true),您关闭了对该特定 Field 实例的访问检查,仅用于反射。现在您可以访问它,即使它是私有(private)、 protected 或包范围,即使调用者不属于这些范围。您仍然无法使用普通代码访问该字段。编译器不允许。

关于java - 为什么不能通过反射访问公共(public)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18179593/

相关文章:

java - 使用反射和数组参数构造类的 IllegalArgumentException

java - 即时创建 java 参数化类型

c# - 获取引用类型的全名而不加载其程序集

rust - Hack Rust 可见性和隐私

java - 如何将未选定的项目从列表移动到另一个列表?列表

java - 用于插入的 WebSphere 应用程序服务器调度程序或 java 调度程序

java - 如何在单个事务中调用2个重载方法?

java - 可以在具体类上使用适配器模式吗?

C++,如何将派生类转换为 protected 基类?

java - 包本地类的 Class literal 和 Class.forName 的不同行为