执行以下代码时我很困惑:
@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/