Module java.base

Class Constructor<T>

类型参数:
T - 声明构造函数的类
所有实现的接口:
AnnotatedElement, GenericDeclaration, Member

public final class Constructor<T> extends Executable
Constructor 提供有关类的单个构造函数的信息和访问权限。

Constructor 允许在将实际参数与newInstance()的底层构造函数的形式参数进行匹配时发生扩展转换,但如果发生缩小转换,则会抛出IllegalArgumentException

自 JDK 版本:
1.1
参见:
  • Method Details

    • setAccessible

      public void setAccessible(boolean flag)
      将此反射对象的accessible标志设置为指定的布尔值。当值为true时,表示反射对象应该在使用时抑制Java语言访问控制检查。当值为false时,表示反射对象在使用时应强制执行Java语言访问控制检查,类描述中指出的变化除外。

      调用者在类C中可以使用此方法来启用对声明类Ddeclaring classmember的访问,如果满足以下任何条件:

      • CD在同一模块中。
      • 成员是public的,D在将D包含的模块至少exports到包含C的模块中。
      • 成员是protected static的,D在将D包含的模块至少exports到包含C的模块中,并且CD的子类。
      • D在将D包含的模块至少opens到包含C的模块中。未命名模块和开放模块中的所有包都对所有模块开放,因此当D在未命名或开放模块中时,此方法总是成功的。

      JNI代码可以使用此方法,如果满足以下条件,则可以在堆栈上没有调用者类的情况下启用对声明类Ddeclaring classmember的访问:

      • 成员是public的,D在无条件exports的包中。

      此方法不能用于启用对私有成员、具有默认(包)访问权限的成员、不同模块中声明的受保护实例成员或受保护构造函数的访问权限,当包含声明类的包未对调用者模块开放时。

      此方法不能用于启用对不可修改的最终字段的访问权限。以下字段是不可修改的:

      • 在任何类或接口中声明的静态最终字段
      • 隐藏类中声明的最终字段
      • 记录中声明的最终字段

      true时,accessible标志会抑制Java语言访问控制检查,仅允许对这些不可修改的最终字段进行访问。

      如果存在安全管理器,则首先调用其checkPermission方法,使用ReflectPermission("suppressAccessChecks")权限。

      如果此对象是Class类的Constructor对象,并且flag为true,则还会抛出SecurityException

      覆盖:
      setAccessible 在类 AccessibleObject
      参数:
      flag - accessible标志的新值
      抛出:
      InaccessibleObjectException - 如果无法启用访问权限
      SecurityException - 如果安全管理器拒绝请求或这是java.lang.Class的构造函数
      外部规范
      参见:
    • getDeclaringClass

      public Class<T> getDeclaringClass()
      返回代表声明由此对象表示的构造函数的类的Class对象。
      指定者:
      getDeclaringClass 在接口 Member
      指定者:
      getDeclaringClass 在类 Executable
      返回:
      表示底层成员的声明类的对象
    • getName

      public String getName()
      返回此构造函数的名称,作为字符串。这是构造函数声明类的二进制名称。
      指定者:
      getName 在接口 Member
      指定者:
      getName 在类 Executable
      返回:
      底层成员的简单名称
    • getModifiers

      public int getModifiers()
      返回此对象表示的可执行对象的Java语言修饰符
      指定者:
      getModifiers 在接口 Member
      指定者:
      getModifiers 在类 Executable
      返回:
      此对象表示的可执行对象的Java语言修饰符
      参见 Java语言规范
      8.8.3 构造函数修饰符
      另请参阅:
    • getTypeParameters

      public TypeVariable<Constructor<T>>[] getTypeParameters()
      返回一个TypeVariable对象数组,表示此GenericDeclaration对象声明的泛型声明中声明的类型变量,按声明顺序排列。如果基础泛型声明未声明任何类型变量,则返回长度为0的数组。
      指定者:
      getTypeParameters 在接口 GenericDeclaration
      指定者:
      getTypeParameters 在类 Executable
      返回:
      一个TypeVariable对象数组,表示此泛型声明声明的类型变量
      抛出:
      GenericSignatureFormatError - 如果此泛型声明的泛型签名不符合Java虚拟机规范中指定的格式
      自:
      1.5
    • getParameterTypes

      public Class<?>[] getParameterTypes()
      返回一个Class对象数组,表示此对象所代表的可执行对象的声明顺序中的形式参数类型。如果基础可执行对象不带参数,则返回长度为0的数组。请注意,一些内部类的构造函数可能除了显式声明的参数外,还有一个隐式声明的参数。
      指定者:
      getParameterTypes 在类 Executable
      返回:
      此对象表示的可执行对象的参数类型
    • getParameterCount

      public int getParameterCount()
      返回此对象所代表的可执行对象的形式参数数量(无论是显式声明的、隐式声明的还是两者都不是)。
      指定者:
      getParameterCount 在类 Executable
      返回:
      此对象表示的可执行对象的形式参数数量
      自:
      1.8
    • getGenericParameterTypes

      public Type[] getGenericParameterTypes()
      返回一个Type对象数组,表示此对象所代表的可执行对象的声明顺序中的形式参数类型。如果基础可执行对象不带参数,则返回长度为0的数组。请注意,一些内部类的构造函数可能除了显式声明的参数外,还有一个隐式声明的参数。还请注意,作为建模工件,返回的参数数量可能因是否存在泛型信息而有所不同。如果存在泛型信息,则只返回源代码中明确存在的参数;如果不存在泛型信息,则可能还会返回隐式和合成参数。

      如果形式参数类型是参数化类型,则返回的Type对象必须准确反映源代码中使用的实际类型参数。

      如果形式参数类型是类型变量或参数化类型,则会创建它。否则,它会被解析。

      覆盖:
      getGenericParameterTypes 在类 Executable
      返回:
      一个Type数组,表示基础可执行对象的形式参数类型,按声明顺序排列
      抛出:
      GenericSignatureFormatError - 如果泛型方法签名不符合Java虚拟机规范中指定的格式
      TypeNotPresentException - 如果基础可执行对象的任何参数类型引用不存在的类型声明
      MalformedParameterizedTypeException - 如果基础可执行对象的参数类型引用由于任何原因无法实例化的参数化类型
      自:
      1.5
    • getExceptionTypes

      public Class<?>[] getExceptionTypes()
      返回一个Class对象数组,表示此对象所代表的可执行对象声明要抛出的异常类型。如果可执行对象在其throws子句中未声明异常,则返回长度为0的数组。
      指定者:
      getExceptionTypes 在类 Executable
      返回:
      此对象表示的可执行对象声明要抛出的异常类型
    • getGenericExceptionTypes

      public Type[] getGenericExceptionTypes()
      返回一个Type对象数组,表示此可执行对象声明要抛出的异常。如果基础可执行对象在其throws子句中未声明异常,则返回长度为0的数组。

      如果异常类型是类型变量或参数化类型,则会创建它。否则,它会被解析。

      覆盖:
      getGenericExceptionTypes 在类 Executable
      返回:
      一个表示基础可执行对象抛出的异常类型的Type数组
      抛出:
      GenericSignatureFormatError - 如果泛型方法签名不符合Java虚拟机规范中指定的格式
      TypeNotPresentException - 如果基础可执行对象的throws子句引用不存在的类型声明
      MalformedParameterizedTypeException - 如果基础可执行对象的throws子句引用由于任何原因无法实例化的参数化类型
      自:
      1.5
    • equals

      public boolean equals(Object obj)
      将此Constructor与指定对象进行比较。如果对象相同,则返回true。如果两个Constructor对象由同一类声明并具有相同的形式参数类型,则它们相同。
      覆盖:
      equals 在类 Object
      参数:
      obj - 要比较的引用对象。
      返回:
      如果此对象与obj参数相同,则返回true;否则返回false
      另请参阅:
    • hashCode

      public int hashCode()
      返回此Constructor的哈希码。哈希码与底层构造函数的声明类名的哈希码相同。
      覆盖:
      hashCode 在类 Object
      返回:
      此对象的哈希码值。
      另请参阅:
    • toString

      public String toString()
      返回描述此Constructor的字符串。字符串格式为构造函数的访问修饰符(如果有)、后跟声明类的完全限定名称,后跟括号括起的、逗号分隔的构造函数的形式参数类型列表。例如:
      
          public java.util.HashMap(int,float)
       

      如果构造函数声明要抛出异常,则参数列表后跟一个空格,后跟单词"throws",后跟一个逗号分隔的抛出异常类型列表。

      构造函数的唯一可能修饰符是访问修饰符publicprotectedprivate。这三者只能出现一个,如果构造函数具有默认(包)访问权限,则可以没有任何一个。

      覆盖:
      toString 在类 Object
      返回:
      描述此Constructor的字符串
      参见 Java语言规范
      8.8.3 构造函数修饰符
      8.9.2 枚举体声明
    • toGenericString

      public String toGenericString()
      返回描述此Constructor的字符串,包括类型参数。该字符串格式为构造函数的访问修饰符(如果有的话),后跟构造函数的类型参数的尖括号分隔的逗号分隔列表(如果有的话),包括类型参数的信息性边界(如果有的话),后跟声明类的完全限定名称,后跟构造函数的泛型形式参数类型的括号,逗号分隔的列表。如果此构造函数声明为接受可变数量的参数,而不是将最后一个参数标记为"Type[]",则将其标记为"Type..."。使用空格将访问修饰符与类型参数或类名分开。如果没有类型参数,则省略类型参数列表;如果存在类型参数列表,则使用空格将列表与类名分开。如果构造函数声明要抛出异常,则参数列表后跟一个空格,后跟单词"throws",后跟逗号分隔的泛型抛出异常类型列表。

      构造函数的唯一可能修饰符是访问修饰符publicprotectedprivate。这三者中只能出现一个,或者如果构造函数具有默认(包)访问权限,则可以一个也不出现。

      指定者:
      toGenericString 在类 Executable
      返回:
      描述此Constructor的字符串,包括类型参数
      参见 Java 语言规范
      8.8.3 构造函数修饰符
      8.9.2 枚举体声明
      自版本:
      1.5
    • newInstance

      使用此Constructor对象表示的构造函数来创建和初始化构造函数声明类的新实例,并使用指定的初始化参数。个别参数会自动解包以匹配原始形式参数,并且原始和引用参数将根据需要进行方法调用转换。

      如果基础构造函数所需的形式参数数量为0,则提供的initargs数组可以长度为0或为null。

      如果构造函数的声明类是非静态上下文中的内部类,则构造函数的第一个参数需要是封闭实例;请参阅The Java Language Specification的第15.9.3节。

      如果需要的访问和参数检查成功并且实例化将继续进行,则如果尚未初始化构造函数的声明类,则将初始化该类。

      如果构造函数正常完成,则返回新创建和初始化的实例。

      参数:
      initargs - 传递给构造函数调用的对象数组;原始类型的值将包装在适当类型的包装对象中(例如,在Float中的float
      返回:
      通过调用此对象表示的构造函数创建的新对象
      抛出:
      IllegalAccessException - 如果此Constructor对象正在强制执行Java语言访问控制,并且基础构造函数不可访问。
      IllegalArgumentException - 如果实际参数和形式参数的数量不同;如果原始参数的解包转换失败;或者如果在可能的解包后,参数值无法通过方法调用转换转换为相应的形式参数类型;如果此构造函数属于枚举类。
      InstantiationException - 如果声明基础构造函数的类表示抽象类。
      InvocationTargetException - 如果基础构造函数引发异常。
      ExceptionInInitializerError - 如果此方法引发的初始化失败。
    • isVarArgs

      public boolean isVarArgs()
      如果此可执行文件声明为接受可变数量的参数,则返回true;否则返回false
      覆盖:
      isVarArgs 在类 Executable
      返回:
      如果此可执行文件声明为接受可变数量的参数,则返回true;否则返回false
      参见 Java 语言规范
      8.4.1 形式参数
      自版本:
      1.5
    • isSynthetic

      public boolean isSynthetic()
      如果此可执行文件是合成构造,则返回true;否则返回false
      指定者:
      isSynthetic 在接口 Member
      覆盖:
      isSynthetic 在类 Executable
      返回:
      如果此可执行文件是合成构造,根据The Java Language Specification的定义,则返回true
      参见 Java 语言规范
      13.1 二进制形式
      参见 Java 虚拟机规范
      4.6 方法
      自版本:
      1.5
      另请参见:
    • getAnnotation

      public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
      如果此元素的指定类型的注解存在,则返回该注解;否则返回null。

      请注意,此方法返回的任何注解都是声明注解。

      指定者:
      getAnnotation 在接口 AnnotatedElement
      覆盖:
      getAnnotation 在类 Executable
      类型参数:
      T - 要查询并返回的注解类型
      参数:
      annotationClass - 对应于注解类型的Class对象
      返回:
      如果此元素上存在指定注解类型的注解,则返回该元素的注解,否则返回null
      抛出:
      NullPointerException - 如果给定的注解类为null
      自版本:
      1.5
    • getDeclaredAnnotations

      public Annotation[] getDeclaredAnnotations()
      返回直接存在于此元素上的注解。此方法忽略继承的注解。如果此元素上没有直接存在的注解,则返回值为长度为0的数组。调用此方法的调用者可以修改返回的数组;这不会影响返回给其他调用者的数组。

      请注意,此方法返回的任何注解都是声明注解。

      指定者:
      getDeclaredAnnotations 在接口 AnnotatedElement
      覆盖:
      getDeclaredAnnotations 在类 AccessibleObject
      返回:
      直接存在于此元素上的注解
      自版本:
      1.5
    • getParameterAnnotations

      public Annotation[][] getParameterAnnotations()
      返回一个Executable对象表示的Executable的形式参数的注解数组的数组,按声明顺序排列。将在返回的数组中表示合成和强制参数(请参见下面的解释),例如内部类构造函数的外部"this"参数。如果可执行文件没有参数(意味着没有形式参数、合成参数和强制参数),则将返回长度为0的数组。如果Executable有一个或多个参数,则对于每个没有注解的参数将返回长度为零的嵌套数组。返回的数组中包含的注解对象是可序列化的。调用此方法的调用者可以修改返回的数组;这不会影响返回给其他调用者的数组。编译器可能会向方法的参数列表中添加在源代码中隐式声明的额外参数("强制"),以及在源代码中既不隐式声明也不显式声明的参数("合成")。有关更多信息,请参阅Parameter

      请注意,此方法返回的任何注解都是声明注解。

      指定者:
      getParameterAnnotations 在类 Executable
      返回:
      表示此对象表示的可执行对象的形式和隐式参数上的注解的数组的数组,按声明顺序排列
      自版本:
      1.5
      参见:
    • getAnnotatedReturnType

      public AnnotatedType getAnnotatedReturnType()
      返回一个AnnotatedType对象,该对象表示用于指定此Executable所代表的方法/构造函数的返回类型的类型使用。如果此Executable对象表示构造函数,则AnnotatedType对象表示构造对象的类型。如果此Executable对象表示方法,则AnnotatedType对象表示用于指定方法返回类型的类型使用。
      指定者:
      getAnnotatedReturnType 在类 Executable
      返回:
      表示此Executable所代表的方法或构造函数的返回类型的对象
      自:
      1.8
    • getAnnotatedReceiverType

      public AnnotatedType getAnnotatedReceiverType()
      返回一个AnnotatedType对象,该对象表示用于指定此Executable对象所代表的方法/构造函数的接收者类型的类型使用。方法/构造函数的接收者类型仅在方法/构造函数具有接收者参数时才可用(JLS 8.4.1)。如果此Executable对象表示实例方法或表示内部成员类的构造函数,并且方法/构造函数要么没有接收者参数,要么接收者参数的类型没有注解,则返回值是表示没有注解的元素的AnnotatedType对象。如果此Executable对象表示静态方法或表示顶层、静态成员、局部或匿名类的构造函数,则返回值为null。
      覆盖:
      getAnnotatedReceiverType 在类 Executable
      返回:
      表示此Executable所代表的方法或构造函数的接收者类型的对象,如果此Executable无法具有接收者参数,则返回null
      自:
      1.8