模块 java.base

类 Constructor<T>

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

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

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

自从:
1.1
参见:
  • 方法详情

    • setAccessible

      public void setAccessible(boolean flag)
      将此反射对象的 accessible 标志设置为指示的boolean。值 true 表示反射对象在使用时应禁止检查 Java 语言访问控制。值 false 表示反射对象在使用时应强制检查 Java 语言访问控制,并在类描述中注明变化。

      如果以下任何一项成立,则类 C 中的调用者可以使用此方法来启用对 declaring class Dmember 的访问:

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

      当且仅当:

      • 成员是publicDpublic,模块无条件包含D exports

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

      此方法不能用于启用 write non-modifiable final 字段的访问。以下字段是不可修改的:

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

      true 时的 accessible 标志抑制 Java 语言访问控制检查以仅启用 read 对这些不可修改的最终字段的访问。

      如果有安全管理器,它的 checkPermission 方法将首先以 ReflectPermission("suppressAccessChecks") 权限调用。

      如果此对象是类 ClassConstructor 对象且 flag 为真,也会抛出 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 语言 modifiers
      指定者:
      getModifiers 在接口 Member
      指定者:
      getModifiers 在类 Executable
      返回:
      此对象表示的可执行文件的 Java 语言 modifiers
      Java 语言规范:
      8.8.3 构造函数修饰符
      参见:
    • getTypeParameters

      public TypeVariable <构造方法 <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
      返回:
      表示底层可执行文件抛出的异常类型的 Types 数组
      抛出:
      GenericSignatureFormatError - 如果泛型方法签名不符合指定的格式Java 虚拟机规范
      TypeNotPresentException - 如果底层可执行文件的 throws 子句引用不存在的类型声明
      MalformedParameterizedTypeException - 如果底层可执行文件的 throws 子句引用了由于任何原因无法实例化的参数化类型
      自从:
      1.5
    • equals

      public boolean equals(Object  obj)
      将此 Constructor 与指定对象进行比较。如果对象相同,则返回 true。如果两个 Constructor 对象由同一个类声明并且具有相同的形参类型,则它们是相同的。
      重写:
      equals 在类 Object
      参数:
      obj - 要比较的参考对象。
      返回:
      true 如果此对象与 obj 参数相同; 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。

      如果构造函数的声明类是非静态上下文中的内部类,则构造函数的第一个参数需要是封闭实例;参见第 15.9.3Java 语言规范.

      如果所需的访问和参数检查成功并且实例化将继续,构造方法的声明类将被初始化(如果它尚未初始化)。

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

      参数:
      initargs - 要作为参数传递给构造函数调用的对象数组;基本类型的值被包装在适当类型的包装器对象中(例如 floatFloat 中)
      返回:
      通过调用此对象表示的构造方法创建的新对象
      抛出:
      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
      返回:
      当且仅当此可执行文件是一个合成构造时才为真Java 语言规范.
      Java 语言规范:
      13.1 二进制形式
      Java 虚拟机规范:
      4.6 方法
      自从:
      1.5
      参见:
    • getAnnotation

      public <T extends Annotation > T getAnnotation(Class <T> annotationClass)
      如果此类注解为 present ,则返回此元素针对指定类型的注解,否则为 null。

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

      指定者:
      getAnnotation 在接口 AnnotatedElement
      重写:
      getAnnotation 在类 Executable
      类型参数:
      T - 要查询并返回的注释类型(如果存在)
      参数:
      annotationClass——注解类型对应的Class对象
      返回:
      如果此元素上存在此元素的指定注解类型的注解,则为 null
      抛出:
      NullPointerException - 如果给定的注释类为 null
      自从:
      1.5
    • getDeclaredAnnotations

      public Annotation [] getDeclaredAnnotations()
      返回此元素上的 directly present 注释。此方法忽略继承的注释。如果该元素上没有注解directly present,则返回值为长度为0的数组。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。

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

      指定者:
      getDeclaredAnnotations 在接口 AnnotatedElement
      重写:
      getDeclaredAnnotations 在类 AccessibleObject
      返回:
      注释直接出现在这个元素上
      自从:
      1.5
    • getParameterAnnotations

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

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

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

      public AnnotatedType  getAnnotatedReturnType()
      返回一个 AnnotatedType 对象,该对象表示使用一种类型来指定此可执行文件表示的方法/构造函数的返回类型。如果这个 Executable 对象表示构造函数,那么 AnnotatedType 对象表示构造对象的类型。如果这个Executable对象代表一个方法,那么 AnnotatedType对象代表使用一个类型来指定方法的返回类型。
      指定者:
      getAnnotatedReturnType 在类 Executable
      返回:
      表示此 Executable 表示的方法或构造函数的返回类型的对象
      自从:
      1.8
    • getAnnotatedReceiverType

      public AnnotatedType  getAnnotatedReceiverType()
      返回一个 AnnotatedType 对象,该对象表示使用一种类型来指定此 Executable 对象表示的方法/构造函数的接收者类型。仅当方法/构造函数具有接收者参数 (JLS 8.4.1) 时,方法/构造函数的接收者类型才可用。如果此 Executable 对象 represents an instance method or represents a constructor of an inner member class 和方法/构造函数 either 没有接收者参数或接收者参数在其类型上没有注释,则返回值是一个 AnnotatedType 对象,代表一个没有注释的元素。如果此 Executable 对象表示静态方法或表示顶级、静态成员、本地或匿名类的构造函数,则返回值为 null。
      重写:
      getAnnotatedReceiverType 在类 Executable
      返回:
      表示由 this Executablenull 表示的方法或构造函数的接收者类型的对象,如果 this Executable 不能有接收者参数
      自从:
      1.8