Java 为什么公共构造函数不能通过反射访问

Java 为什么公共构造函数不能通过反射访问,java,reflection,class-visibility,Java,Reflection,Class Visibility,在执行以下代码时,我感到困惑: @Test public void testAccessible() throws NoSuchMethodException { Constructor<LinkedList> constructor = LinkedList.class.getConstructor(); Assert.assertTrue(constructor.isAccessible()); } @测试 public void testAccessible(

在执行以下代码时,我感到困惑:

@Test
public void testAccessible() throws NoSuchMethodException {
    Constructor<LinkedList> constructor = LinkedList.class.getConstructor();
    Assert.assertTrue(constructor.isAccessible());
}
@测试
public void testAccessible()引发NoSuchMethodException{
构造函数=LinkedList.class.getConstructor();
Assert.assertTrue(constructor.isAccessible());
}
断言失败,但LinkedList类具有
public
默认构造函数。那么为什么isAccessible()返回false呢?

来自

值false表示反射对象应强制执行Java语言访问检查

isAccessible
与Java的安全管理器的关系比与它的公共可见性的关系更大

并且都只返回
公共
构造函数

Declaration
public Constructor<T> getConstructor(Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException
} }


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

浏览java中
修饰符类的文档。[它具有确定类成员可见性所需的方法


isAccessible
允许反射API在运行时访问任何成员。通过调用
Field.setAccessible(true)
关闭此特定字段实例的访问检查,仅用于反射。现在,即使它是私有、受保护或包作用域,也可以访问它,即使调用方不是这些作用域的一部分。仍然无法使用普通代码访问该字段。编译器将不允许使用它。

可以使用
getModifiers()
确定可访问性/修饰符的方法,
isAccessible()
的存在有不同的目的。1-
LinkedList
有一个默认构造函数2-这与问题有什么关系??
Example :
package com.tutorialspoint;

import java.lang.reflect.*;

public class ClassDemo {

public static void main(String[] args) {

 try {
    // returns the Constructor object of the public constructor
    Class cls[] = new Class[] { String.class };
    Constructor c = String.class.getConstructor(cls);
    System.out.println(c);
 }
 catch(Exception e) {
    System.out.println(e);
 }