- java.lang.Object
-
- java.lang.reflect.AccessibleObject
-
- java.lang.reflect.Executable
-
- java.lang.reflect.Constructor<T>
-
- 参数类型
-
T- 声明构造函数的类
- All Implemented Interfaces:
-
AnnotatedElement,GenericDeclaration,Member
public final class Constructor<T> extends Executable
Constructor提供了一个类的单个构造函数的信息和访问权限。Constructor允许在将实际参数与newInstance()与底层构造函数的形式参数进行匹配时进行扩展转换,但如果发生缩小转换,则抛出IllegalArgumentException。- 从以下版本开始:
- 1.1
- 另请参见:
-
Member,Class,Class.getConstructors(),Class.getConstructor(Class[]),Class.getDeclaredConstructors()
-
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 booleanequals(Object obj)将此Constructor与指定对象进行比较。AnnotatedTypegetAnnotatedReceiverType()返回一个AnnotatedType对象,表示使用类型来指定由此Executable对象表示的方法/构造函数的接收器类型。AnnotatedTypegetAnnotatedReturnType()返回一个AnnotatedType对象,该对象表示使用类型来指定此可执行文件所表示的方法/构造函数的返回类型。<T extends Annotation>
TgetAnnotation(Class<T> annotationClass)返回该元素的,如果这样的注释 ,否则返回null指定类型的注释。Annotation[]getDeclaredAnnotations()返回 直接存在于此元素上的注释。Class<T>getDeclaringClass()返回表示声明由该对象表示的构造函数的类的Class对象。Class<?>[]getExceptionTypes()返回一个Class对象的数组,Class表示由该对象表示的底层可执行文件抛出的异常类型。Type[]getGenericExceptionTypes()返回一个Type对象的数组,表示此可执行对象声明抛出的异常。Type[]getGenericParameterTypes()返回一个Type对象的数组,表示由该对象表示的可执行文件的声明顺序的形式参数类型。intgetModifiers()返回由该对象表示的可执行文件的Java语言modifiers 。StringgetName()以字符串形式返回此构造函数的名称。Annotation[][]getParameterAnnotations()返回一个Annotation的数组数组,表示由该对象表示的Executable的形式参数的声明顺序。intgetParameterCount()返回由此对象表示的可执行文件的形式参数(无论是显式声明还是隐式声明)的数量。Class<?>[]getParameterTypes()返回一个Class对象的数组,表示由该对象表示的可执行文件的声明顺序的形式参数类型。TypeVariable<Constructor<T>>[]getTypeParameters()返回一个TypeVariable对象的数组,TypeVariable以声明顺序表示由该GenericDeclaration对象表示的通用声明声明的类型变量。inthashCode()返回此Constructor的哈希Constructor。booleanisSynthetic()如果此可执行文件是合成结构,则返回true; 否则返回false。booleanisVarArgs()如果这个可执行文件被声明为采用可变数量的参数,则返回true; 否则返回false。TnewInstance(Object... initargs)使用由此Constructor对象表示的构造函数,使用指定的初始化参数来创建和初始化构造函数的声明类的新实例。voidsetAccessible(boolean flag)将此反射对象的accessible标志设置为指示的布尔值。StringtoGenericString()返回一个描述这个Constructor的字符串,包括类型参数。StringtoString()返回一个描述这个Constructor的字符串。-
Methods inherited from class java.lang.reflect.AccessibleObject
canAccess, getAnnotations, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAccessible, isAnnotationPresent, setAccessible, trySetAccessible
-
Methods inherited from interface java.lang.reflect.AnnotatedElement
getAnnotations, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAnnotationPresent
-
Methods inherited from class java.lang.reflect.Executable
getAnnotatedExceptionTypes, getAnnotatedParameterTypes, getAnnotationsByType, getParameters
-
-
-
-
方法详细信息
-
setAccessible
public void setAccessible(boolean flag)
将此反射对象的accessible标志设置为指示的布尔值。 值为true表示反射对象应该在使用Java语言访问控制时抑制检查。 值为false表示反射对象应该在使用Java语言访问控制时执行检查,并在类描述中指出变体。呼叫者可以在
C类中使用此方法,以使得能够访问declaring classdeclaring classD如果有以下任何一项):-
C和D在相同的模块中。 - 所述构件是
public和D是public在于包含模块的封装Dexports到至少包含模块C。 - 所述构件是
protectedstatic,D是public在于包含模块的封装D出口到至少包含模块C,和C是的一个子类D。 -
D是在一个包中,模块至少包含Dopens,模块包含C。 未命名和开放模块中的所有软件包均可对所有模块开放,因此当D处于未命名或打开模块时,此方法始终会成功。
当声明类与调用者不同的模块时,此方法不能用于启用对私有成员,具有默认(包)访问权限的成员,受保护的实例成员或受保护的构造函数的访问,并且包含声明类的包不能打开呼叫者的模块。
如果有一个安全管理员,它的
checkPermission方法首先被调用一个ReflectPermission("suppressAccessChecks")权限。一个
SecurityException如果这个对象是也抛出Constructor对象类Class和flag是真的。- 重写:
-
setAccessible在AccessibleObject - 参数
-
flag- 新值为accessible旗帜 - 异常
-
InaccessibleObjectException- 如果无法启用访问 -
SecurityException- 如果请求被安全管理器拒绝,或者是java.lang.Class的构造java.lang.Class - 另请参见:
-
AccessibleObject.trySetAccessible(),MethodHandles.privateLookupIn(java.lang.Class<?>, java.lang.invoke.MethodHandles.Lookup)
-
-
getDeclaringClass
public Class<T> getDeclaringClass()
返回表示声明由该对象表示的构造函数的类的Class对象。- Specified by:
-
getDeclaringClass在接口Member - Specified by:
-
getDeclaringClass在Executable - 结果
- 一个表示底层成员声明类的对象
-
getName
public String getName()
以字符串形式返回此构造函数的名称。 这是构造函数的声明类的二进制名称。- Specified by:
-
getName在接口Member - Specified by:
-
getName在Executable - 结果
- 底层成员的简单名称
-
getModifiers
public int getModifiers()
返回由该对象表示的可执行文件的Java语言modifiers 。- Specified by:
-
getModifiers在接口Member - Specified by:
-
getModifiers在Executable - 结果
- 底层成员的Java语言修饰符
- 另请参见:
-
Modifier
-
getTypeParameters
public TypeVariable<Constructor<T>>[] getTypeParameters()
返回的数组TypeVariable对象表示通过此表示的一般声明声明的类型变量GenericDeclaration目的,在声明的顺序。 如果底层通用声明不声明类型变量,则返回长度为0的数组。- Specified by:
-
getTypeParameters在接口GenericDeclaration - Specified by:
-
getTypeParameters在Executable - 结果
-
一个
TypeVariable对象的数组,表示由此通用声明声明的类型变量 - 异常
-
GenericSignatureFormatError- 如果此通用声明的通用签名不符合 The Java™ Virtual Machine Specification中规定的格式 - 从以下版本开始:
- 1.5
-
getParameterTypes
public Class<?>[] getParameterTypes()
返回一个Class对象的数组,Class以声明顺序表示由该对象表示的可执行文件的形式参数类型。 如果底层可执行文件没有参数,则返回长度为0的数组。- Specified by:
-
getParameterTypes在Executable - 结果
- 该对象表示的可执行文件的参数类型
-
getParameterCount
public int getParameterCount()
返回由此对象表示的可执行文件的形式参数(无论是显式声明还是隐式声明)的数量。- 重写:
-
getParameterCount在Executable - 结果
- 该对象表示的可执行文件的形式参数的数量
- 从以下版本开始:
- 1.8
-
getGenericParameterTypes
public Type[] getGenericParameterTypes()
返回一个Type对象的数组,Type以声明顺序表示由该对象表示的可执行文件的形式参数类型。 如果底层可执行文件没有参数,则返回长度为0的数组。如果形式参数类型是参数化类型,则
Type返回的Type对象必须准确反映源代码中使用的实际类型参数。如果形式参数类型是类型变量或参数化类型,则会创建它。 否则解决。
- 重写:
-
getGenericParameterTypes在Executable - 结果
-
一个
Type的数组,以声明顺序表示底层可执行文件的形式参数类型 - 异常
-
GenericSignatureFormatError- 如果通用方法签名不符合 The Java™ Virtual Machine Specification中指定的格式 -
TypeNotPresentException- 如果底层可执行文件的任何参数类型是指不存在的类型声明 -
MalformedParameterizedTypeException- 如果任何底层可执行文件的参数类型是指由于任何原因无法实例化的参数化类型 - 从以下版本开始:
- 1.5
-
getExceptionTypes
public Class<?>[] getExceptionTypes()
返回一个Class对象的数组,表示由该对象表示的底层可执行文件所声明的异常类型。 如果可执行文件在其throws子句中不声明异常,则返回长度为0的数组。- Specified by:
-
getExceptionTypes在Executable - 结果
- 被该对象表示的可执行文件抛出的异常类型
-
getGenericExceptionTypes
public Type[] getGenericExceptionTypes()
返回一个Type对象的数组,它们表示声明为该可执行对象抛出的异常。 如果底层可执行文件在其throws子句中声明无例外,则返回长度为0的数组。如果异常类型是类型变量或参数化类型,则会创建它。 否则解决。
- 重写:
-
getGenericExceptionTypes在Executable - 结果
- 一组数组,表示底层可执行文件抛出的异常类型
- 异常
-
GenericSignatureFormatError- 如果通用方法签名不符合 The Java™ Virtual Machine Specification中指定的格式 -
TypeNotPresentException- 如果底层可执行文件的throws子句引用不存在的类型声明 -
MalformedParameterizedTypeException- 如果底层可执行文件的throws子句是指由于任何原因无法实例化的参数化类型 - 从以下版本开始:
- 1.5
-
equals
public boolean equals(Object obj)
将此Constructor与指定对象进行比较。 如果对象相同,则返回true。 两个Constructor对象是相同的,如果它们被同一个类声明并具有相同的形式参数类型。- 重写:
-
equals在类Object - 参数
-
obj- 与之比较的参考对象。 - 结果
-
true如果此对象与obj参数相同; 否则为false。 - 另请参见:
-
Object.hashCode(),HashMap
-
hashCode
public int hashCode()
返回此Constructor的哈希Constructor。 哈希码与底层构造函数的声明类名称的哈希码相同。- 重写:
-
hashCode在Object - 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
-
toString
public String toString()
返回描述这个Constructor的字符串。 该字符串格式化为构造函数访问修饰符(如果有),后跟声明类的完全限定名称,后跟括号,逗号分隔的构造函数形式参数类型列表。 例如:public java.util.Hashtable(int,float)如果构造函数被声明为抛出异常,则参数列表后跟一个空格,后面跟有“
throws”一词,后面是抛出的异常类型的逗号分隔列表。对构造方法唯一可能的修饰符是访问修饰符
public,protected或者private。 只有其中一个可能出现,或者如果构造函数具有默认(包)访问权限,则不会显示。
-
toGenericString
public String toGenericString()
返回描述此Constructor的字符串,包括类型参数。 该字符串格式化为构造函数访问修饰符(如果有),后跟一个由括号括起的逗号分隔的构造函数类型参数列表(如果有),后跟声明类的完全限定名称,后跟括号,构造函数的通用形式参数类型的分隔列表。 如果这个构造函数被声明为可变数量的参数,而不是将最后一个参数表示为“Type[]”,则表示为“Type...”。 一个空格用于将访问修饰符彼此和类型参数或类名分开。 如果没有类型参数,则类型参数列表将被删除; 如果存在类型参数列表,则将列表与类名称隔开。 如果构造函数被声明为抛出异常,则参数列表后跟一个空格,后跟“throws”,后跟通用抛出的异常类型的逗号分隔列表。对构造方法唯一可能的修饰符是访问修饰符
public,protected或者private。 只有其中一个可能出现,或者如果构造函数具有默认(包)访问权限,则不会显示。- Specified by:
-
toGenericString在Executable - 结果
-
一个描述这个
Constructor的字符串,包括类型参数 - 从以下版本开始:
- 1.5
- See The Java™ Language Specification:
- 8.8.3构造函数修饰符,8.9.2枚举体声明
-
newInstance
public T newInstance(Object... initargs) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException
使用由此Constructor对象表示的构造函数,使用指定的初始化参数创建和初始化构造函数的声明类的新实例。 个别参数自动展开以匹配原始形式参数,原始参考参数和参考参数都需要进行方法调用转换。如果底层构造函数所需的形式参数的数量为0,则提供的
initargs数组的长度为0或为空。如果构造函数的声明类是非静态上下文中的内部类,则构造函数的第一个参数需要是封闭实例; 见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如果只有这个可执行文件被声明为一个可变数量的参数。 - 从以下版本开始:
- 1.5
-
isSynthetic
public boolean isSynthetic()
如果这个可执行文件是一个合成的结构,返回true; 否则返回false。- Specified by:
-
isSynthetic在接口Member - 重写:
-
isSynthetic在Executable - 结果
- 如果且仅当此可执行文件是由 The Java™ Language Specification定义的合成结构, 则为true 。
- 从以下版本开始:
- 1.5
- See The Java™ Language Specification:
- 13.1二进制形式
-
getAnnotation
public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
返回该元素的,如果这样的注释 ,否则返回null指定类型的注释。- Specified by:
-
getAnnotation在接口AnnotatedElement - 重写:
-
getAnnotation在Executable - 参数类型
-
T- 要查询的注释类型,如果存在则返回 - 参数
-
annotationClass- 对应于注释类型的Class对象 - 结果
- 该元素的注释指定的注释类型,如果存在于此元素,否则为null
- 异常
-
NullPointerException- 如果给定的注释类为空 - 从以下版本开始:
- 1.5
-
getDeclaredAnnotations
public Annotation[] getDeclaredAnnotations()
返回直接存在于此元素上的注释。 此方法忽略继承的注释。 如果此元素上没有直接显示的注释,则返回值为长度为0的数组。此方法的调用者可以自由修改返回的数组; 它将对返回给其他调用者的数组没有影响。- Specified by:
-
getDeclaredAnnotations在接口AnnotatedElement - 重写:
-
getDeclaredAnnotations在Executable - 结果
- 此元素上直接显示的注释
- 从以下版本开始:
- 1.5
-
getParameterAnnotations
public Annotation[][] getParameterAnnotations()
返回一个Annotations的数组数组,表示由该对象表示的Executable的形式参数的声明顺序。 合成和强制参数(见下面的说明),如内部类构造函数的外部“this”参数将在返回的数组中表示。 如果可执行文件没有参数(意思是没有正式的,没有合成的,没有强制的参数),那么将返回一个零长度的数组。 如果Executable具有一个或多个参数,则对于没有注释的每个参数,返回长度为零的嵌套数组。 包含在返回的数组中的注释对象是可序列化的。 该方法的调用者可以自由修改返回的数组; 它将对返回给其他调用者的数组没有影响。 编译器可以添加在源(“强制”)中隐式声明的额外参数,以及在源(“合成”)中既不是隐式也不显式声明方法的参数列表的参数。 详见Parameter。- Specified by:
-
getParameterAnnotations在Executable - 结果
- 表示由该对象表示的可执行文件的声明顺序的形式和隐式参数上的注释数组
- 从以下版本开始:
- 1.5
- 另请参见:
-
Parameter,Parameter.getAnnotations()
-
getAnnotatedReturnType
public AnnotatedType getAnnotatedReturnType()
返回一个AnnotatedType对象,表示使用类型来指定此可执行文件所表示的方法/构造函数的返回类型。 如果此Executable对象表示构造函数,则AnnotatedType对象表示构造对象的类型。 如果这个Executable对象表示一个方法,那么AnnotatedType对象表示使用一个类型来指定方法的返回类型。- Specified by:
-
getAnnotatedReturnType在类Executable - 结果
-
表示由该
Executable表示的方法或构造函数的返回类型的对象 - 从以下版本开始:
- 1.8
-
getAnnotatedReceiverType
public AnnotatedType getAnnotatedReceiverType()
返回一个AnnotatedType对象,表示使用类型来指定由该Executable对象表示的方法/构造函数的接收器类型。 只有方法/构造函数具有接收器参数(JLS 8.4.1),方法/构造函数的接收器类型才可用。 如果此Executable对象表示一个实例方法或表示内部件类的构造 ,并且所述方法/构造或者具有没有接收器参数或与它的类型没有注释的接收器参数,则返回值是一个AnnotatedType表示对象没有注释的元素 如果这个Executable对象表示一个静态方法,或者表示一个顶级,静态成员,本地或匿名类的构造函数,则返回值为null。- 重写:
-
getAnnotatedReceiverType在Executable - 结果
-
表示由该
Executable或null表示的方法或构造函数的接收器类型的对象,如果该Executable不能具有接收器参数 - 从以下版本开始:
- 1.8
-
-