鸿蒙OS Class

Class

java.lang.Object

|—java.lang.Class<T&

public final class Class<T>
extends Object
implements Serializable, GenericDeclaration, Type, AnnotatedElement

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。 枚举是一种类,注解是一种接口。 每个数组还属于一个类,该类反映为一个 Class 对象,该对象由具有相同元素类型和维数的所有数组共享。 原始 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。

类没有公共构造函数。 相反,Class 对象是由 Java 虚拟机在加载类时自动构造的,并通过调用类加载器中的 defineClass 方法来构造。

以下示例使用 Class 对象来打印对象的类名:

void printClassName(Object obj) {
         System.out.println("The class of " + obj +
                            " is " + obj.getClass().getName());
}

也可以使用类字面量获取命名类型(或 void)的 Class 对象。 请参阅《Java™ 语言规范》的第 15.8.2 节。 例如:

System.out.println(“类Foo的名称是:”+Foo.class.getName());

方法总结

修饰符和类型 方法 描述
<U> Class<? extends U> asSubclass(Class<U> clazz) 转换此 Class 对象以表示由指定类对象表示的类的子类。
T cast(Object obj) 将对象强制转换为此 Class 对象表示的类或接口。
boolean desiredAssertionStatus() 如果要在调用此方法时对其进行初始化,则返回将分配给此类的断言状态。
static Class<?> forName(String className) 返回与具有给定字符串名称的类或接口关联的 Class 对象。
static Class<?> forName(String name, boolean initialize, ClassLoader loader) 使用给定的类加载器,返回与具有给定字符串 nme 的类或接口关联的 Class 对象。
<A extends Annotation>A getAnnotation(Class<A> annotationClass) 如果存在这样的注释,则返回此元素的指定类型的注释,否则返回 null。
Annotation[] getAnnotations() 返回此元素上存在的注释。
<A extends Annotation>A[] getAnnotationsByType(Class<A> annotationClass) 返回与此元素关联的注释。
String getCanonicalName() 返回 Java 语言规范定义的基础类的规范名称。
Class<?>[] getClasses() 返回一个数组,其中包含表示所有公共类和接口的 Class 对象,这些公共类和接口是此 Class 对象表示的类的成员。
ClassLoader getClassLoader() 返回类的类加载器。
Class<?> getComponentType() 返回表示数组组件类型的 Class。
ConstructorT getConstructor(Class<?>… parameterTypes) 返回一个 Constructor 对象,该对象反映此 Class 对象表示的类的指定公共构造函数。
Constructor<?>[] getConstructors() 返回一个包含 Constructor 对象的数组,该对象反映了此 Class 对象表示的类的所有公共构造函数。
<A extends Annotation>A getDeclaredAnnotation(Class<A> annotationClass) 如果直接存在这样的注释,则返回此元素的指定类型的注释,否则返回 null。
Annotation[] getDeclaredAnnotations() 返回此元素上直接存在的注释。
Class<?>[] getDeclaredClasses() 返回一个 Class 对象数组,反映声明为此 Class 对象表示的类的成员的所有类和接口。
ConstructorT getDeclaredConstructor(Class<?>… parameterTypes) 返回一个 Constructor 对象,该对象反映此 Class 对象表示的类或接口的指定构造函数。
Constructor<?>[] getDeclaredConstructors() 返回一个 Constructor 对象数组,反映由该 Class 对象表示的类声明的所有构造函数。
Field getDeclaredField(String name) 返回一个反映此 Class 对象表示的类或接口的指定声明字段的 Field 对象。
Field[] getDeclaredFields() 返回一个 Field 对象数组,反映由此 Class 对象表示的类或接口声明的所有字段。
Method getDeclaredMethod(String name, Class<?>… parameterTypes) 返回一个 Method 对象,该对象反映此 Class 对象表示的类或接口的指定声明方法。
Method[] getDeclaredMethods() 返回一个包含 Method 对象的数组,该对象反映了此 Class 对象表示的类或接口的所有声明方法,包括公共、受保护、默认(包)访问和私有方法,但不包括继承方法。
Class<?> getDeclaringClass() 如果此 Class 对象表示的类或接口是另一个类的成员,则返回表示在其中声明它的类的 Class 对象。
Class<?> getEnclosingClass() 返回基础类的直接封闭类。
Constructor<?> getEnclosingConstructor() 如果此 Class 对象表示构造函数中的本地或匿名类,则返回表示基础类的直接封闭构造函数的 Constructor 对象。
Method getEnclosingMethod() 如果此 Class 对象表示方法中的本地或匿名类,则返回一个 Method 对象,该对象表示基础类的直接封闭方法。
T[] getEnumConstants() 如果此 Class 对象不表示枚举类型,则返回此枚举类的元素或 null。
Field getField(String name) 返回一个反映此 Class 对象表示的类或接口的指定公共成员字段的 Field 对象。
Field[] getFields() 返回一个包含 Field 对象的数组,该数组反映了此 Class 对象表示的类或接口的所有可访问公共字段。
Type[] getGenericInterfaces() 返回表示由该对象表示的类或接口直接实现的接口的类型。
Type getGenericSuperclass() 返回表示此 Class 所表示的实体(类、接口、原始类型或 void)的直接超类的 Type。
Class<?>[] getInterfaces() 确定此对象表示的类或接口实现的接口。
Method getMethod(String name, Class<?>… parameterTypes) 返回一个 Method 对象,该对象反映此 Class 对象表示的类或接口的指定公共成员方法。
Method[] getMethods() 返回一个包含 Method 对象的数组,该对象反映了由此 Class 对象表示的类或接口的所有公共方法,包括由类或接口声明的那些以及从超类和超接口继承的那些。
int getModifiers() 返回此类或接口的 Java 语言修饰符,以整数编码。
String getName() 以字符串形式返回此 Class 对象表示的实体(类、接口、数组类、原始类型或 void)的名称。
Package getPackage() 获取此类的包。
ProtectionDomain getProtectionDomain() 返回此类的 ProtectionDomain。
URL getResource(String name) 查找具有给定名称的资源。
InputStream getResourceAsStream(String name) 查找具有给定名称的资源。
Object[] getSigners() 获取此类的签名者。
String getSimpleName() 返回源代码中给出的基础类的简单名称。
Class<? super T> getSuperclass() 返回表示此 Class 所表示的实体(类、接口、原始类型或 void)的超类的 Class。
String getTypeName() 返回此类型名称的信息字符串。
TypeVariableClassT[] getTypeParameters() 按声明顺序返回一个 TypeVariable 对象数组,这些对象表示由此 GenericDeclaration 对象表示的泛型声明所声明的类型变量。
boolean isAnnotation() 如果此 Class 对象表示注释类型,则返回 true。
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 如果此元素上存在指定类型的注释,则返回 true,否则返回 false。
boolean isAnonymousClass() 当且仅当基础类是匿名类时才返回 true。
boolean isArray() 确定此 Class 对象是否表示数组类。
boolean isAssignableFrom(Class<?> cls) 确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是其超类或超接口。
boolean isEnum() 当且仅当此类在源代码中声明为枚举时才返回 true。
boolean isInstance(Object obj) 确定指定的 Object 是否与该 Class 表示的对象赋值兼容。
boolean isInterface() 确定指定的 Class 对象是否表示接口类型。
boolean isLocalClass() 当且仅当基础类是本地类时返回 true。
boolean isMemberClass() 当且仅当基础类是成员类时才返回 true。
boolean isPrimitive() 确定指定的 Class 对象是否表示原始类型。
boolean isSynthetic() 如果此类是合成类,则返回 true; 否则返回 false。
T newInstance() 创建由此 Class 对象表示的类的新实例。
String toGenericString() 返回描述该类的字符串,包括有关修饰符和类型参数的信息。
String toString() 将对象转换为字符串。
从接口 java.lang.reflect.AnnotatedElement 继承的方法
getDeclaredAnnotationsByType
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

方法详情

toString

public String toString()

将对象转换为字符串。 字符串表示是字符串“类”或“接口”,后跟一个空格,然后是由 getName 返回的格式的类的完全限定名称。 如果此 Class 对象表示原始类型,则此方法返回原始类型的名称。 如果此 Class 对象表示 void,则此方法返回“void”。

覆盖:

类 Object 中的 toString

返回:

此类对象的字符串表示形式。

toGenericString

public String toGenericString()

返回描述该类的字符串,包括有关修饰符和类型参数的信息。 字符串被格式化为类型修饰符列表(如果有),然后是类型的种类(基本类型和类的空字符串,枚举,接口或@interface,视情况而定),然后是类型的名称,然后是 类型的类型参数的尖括号逗号分隔列表(如果有)。 空格用于将修饰符彼此分开,并将任何修饰符与类型分开。 修饰符按规范顺序出现。 如果没有类型参数,则省略类型参数列表。

请注意,由于正在生成有关类型的运行时表示的信息,因此可能存在原始源代码上不存在的修饰符或原始源代码上的非法修饰符。

返回:

描述该类的字符串,包括有关修饰符和类型参数的信息

forName

public static Class<?> forName(String className) throws ClassNotFoundException

返回与具有给定字符串名称的类或接口关联的 Class 对象。 调用此方法等效于:

Class.forName(className, true, currentLoader)

其中 currentLoader 表示当前类的定义类加载器。

例如,以下代码片段返回名为 java.lang.Thread 的类的运行时类描述符:

类 t = Class.forName(“java.lang.Thread”)

调用 forName(“X”) 会导致初始化名为 X 的类。

参数:

参数名称 参数描述
className 所需类的完全限定名称。

返回:

具有指定名称的类的 Class 对象。

Throws:

Throw名称 Throw描述
LinkageError 如果链接失败
ExceptionInInitializerError 如果此方法引发的初始化失败
ClassNotFoundException 如果找不到类

forName

public static Class<?> forName(String name, boolean initialize, ClassLoader loader) throws ClassNotFoundException

使用给定的类加载器返回与具有给定字符串名称的类或接口关联的 Class 对象。给定类或接口的完全限定名称(与 getName 返回的格式相同),此方法尝试定位、加载和链接类或接口。指定的类加载器用于加载类或接口。如果参数加载器为空,则通过引导类加载器加载该类。仅当 initialize 参数为 true 且之前未初始化时,才会初始化该类。

如果 name 表示原始类型或 void,将尝试在名称为 name 的未命名包中查找用户定义的类。因此,此方法不能用于获取任何表示原始类型或 void 的 Class 对象。

如果 name 表示一个数组类,则数组类的组件类型被加载但不被初始化。

例如,在实例方法中,表达式:

Class.forName(“Foo”)

相当于:

Class.forName(“Foo”, true, this.getClass().getClassLoader())

请注意,此方法会引发与 Java 语言规范第 12.2、12.3 和 12.4 节中指定的加载、链接或初始化相关的错误。请注意,此方法不检查其调用者是否可以访问所请求的类。

如果加载器为空,并且存在安全管理器,并且调用者的类加载器不为空,则此方法以 RuntimePermission(“getClassLoader”) 权限调用安全管理器的 checkPermission 方法,以确保可以访问引导类加载器.

参数:

参数名称 参数描述
name 所需类的完全限定名
initialize 如果为真,则该类将被初始化。 请参阅 Java 语言规范的第 12.4 节。
loader 必须从中加载类的类加载器

返回:

表示所需类的类对象

Throws:

Throw名称 Throw描述
LinkageError 如果链接失败
ExceptionInInitializerError 如果此方法引发的初始化失败
ClassNotFoundException 如果指定的类加载器无法找到该类

newInstance

public T newInstance() throws IllegalAccessException, InstantiationException

创建由此 Class 对象表示的类的新实例。 该类被实例化为一个带有空参数列表的新表达式。 如果尚未初始化该类,则将其初始化。

请注意,此方法传播由 nullary 构造函数引发的任何异常,包括已检查的异常。 使用此方法可以有效地绕过编译器执行的编译时异常检查。 Constructor.newInstance 方法通过将构造函数抛出的任何异常包装在(已检查)InvocationTargetException 中来避免此问题。

返回:

此对象表示的类的新分配实例。

Throws:

Throw名称 Throw描述
IllegalAccessException 如果类或其空构造函数不可访问。
InstantiationException 如果此 Class 表示抽象类、接口、数组类、原始类型或 void; 或者如果该类没有空构造函数; 或者如果实例化由于某种其他原因而失败。
ExceptionInInitializerError 如果此方法引发的初始化失败。
SecurityException 如果存在安全管理器 s,并且调用者的类加载器与当前类的类加载器不同或其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问此类的包。

isInstance

public boolean isInstance(Object obj)

确定指定的 Object 是否与该 Class 表示的对象赋值兼容。此方法是 Java 语言 instanceof 运算符的动态等效方法。如果指定的 Object 参数为非 null 并且可以强制转换为此 Class 对象表示的引用类型而不引发 ClassCastException,则该方法返回 true。否则返回 false。

具体来说,如果此 Class 对象表示已声明的类,则如果指定的 Object 参数是表示的类(或其任何子类)的实例,则此方法返回 true;否则返回 false。如果此 Class 对象表示一个数组类,如果指定的 Object 参数可以通过恒等转换或扩展引用转换转换为数组类的对象,则此方法返回 true;否则返回 false。如果此 Class 对象表示一个接口,则如果指定 Object 参数的类或任何超类实现此接口,则此方法返回 true;否则返回 false。如果此 Class 对象表示原始类型,则此方法返回 false。

参数:

参数名称 参数描述
obj 要检查的对象

返回:

如果 obj 是此类的实例,则为 true

isAssignableFrom

public boolean isAssignableFrom(Class<?> cls)

确定此 Class 对象表示的类或接口是否与指定的 Class 参数表示的类或接口相同,或者是其超类或超接口。 如果是,则返回 true; 否则返回false。 如果此 Class 对象表示原始类型,则如果指定的 Class 参数正是此 Class 对象,则此方法返回 true; 否则返回false。

具体来说,该方法测试指定的 Class 参数表示的类型是否可以通过恒等转换或扩展引用转换转换为该 Class 对象表示的类型。 有关详细信息,请参阅 Java 语言规范,第 5.1.1 和 5.1.4 节。

参数:

参数名称 参数描述
cls 要检查的类对象

返回:

布尔值,指示是否可以将 cls 类型的对象分配给此类的对象

Throws:

Throw名称 Throw描述
NullPointerException 如果指定的 Class 参数为空。

isInterface

public boolean isInterface()

确定指定的 Class 对象是否表示接口类型。

返回:

如果此对象表示一个接口,则为 true; 否则为假。

isArray

public boolean isArray()

确定此 Class 对象是否表示数组类。

返回:

如果此对象表示一个数组类,则为 true; 否则为假。

isPrimitive

public boolean isPrimitive()

确定指定的 Class 对象是否表示原始类型。

有九个预定义的 Class 对象来表示八种原始类型和 void。 它们由 Java 虚拟机创建,并且与它们所代表的原始类型具有相同的名称,即 boolean、byte、char、short、int、long、float 和 double。

这些对象只能通过以下公共静态最终变量访问,并且是此方法返回 true 的唯一 Class 对象。

返回:

当且仅当此类表示原始类型时才为真

isAnnotation

public boolean isAnnotation()

如果此 Class 对象表示注释类型,则返回 true。 请注意,如果此方法返回 true,isInterface() 也将返回 true,因为所有注释类型也是接口。

返回:

如果此类对象表示注释类型,则为 true; 否则为假

isSynthetic

public boolean isSynthetic()

如果此类是合成类,则返回 true; 否则返回 false。

返回:

当且仅当此类是 Java 语言规范定义的合成类时才为真。

getName

public String getName()

以字符串形式返回此 Class 对象表示的实体(类、接口、数组类、原始类型或 void)的名称。

如果该类对象表示非数组类型的引用类型,则返回该类的二进制名称,如《Java™ 语言规范》所指定。

如果此类对象表示原始类型或 void,则返回的名称是与原始类型或 void 对应的 Java 语言关键字相等的 String。

如果该类对象表示一类数组,则名称的内部形式由元素类型的名称组成,前面有一个或多个“[”字符,表示数组嵌套的深度。 元素类型名称的编码如下:

类或接口名称 classname 是上面指定的类的二进制名称。

例子:

 String.class.getName()     returns "java.lang.String" byte.class.getName()     returns "byte" (new Object[3]).getClass().getName()     returns "[Ljava.lang.Object;" (new int[3][4][5][6][7][8][9]).getClass().getName()     returns "[[[[[[[I" 

返回:

此对象表示的类或接口的名称。

getClassLoader

public ClassLoader getClassLoader()

返回类的类加载器。 一些实现可能使用 null 来表示引导类加载器。 如果此类由引导类加载器加载,则此方法将在此类实现中返回 null。

如果存在安全管理器,并且调用者的类加载器不为空,并且调用者的类加载器与请求其类加载器的类的类加载器不同或其祖先,则此方法调用安全管理器的 checkPermission 方法 具有 RuntimePermission(“getClassLoader”) 权限,以确保可以访问该类的类加载器。

如果此对象表示原始类型或 void,则返回 null。

返回:

加载此对象表示的类或接口的类加载器。

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器并且其 checkPermission 方法拒绝访问该类的类加载器。

getTypeParameters

public TypeVariableClassT[] getTypeParameters()

按声明顺序返回一个 TypeVariable 对象数组,这些对象表示由此 GenericDeclaration 对象表示的泛型声明所声明的类型变量。 如果基础泛型声明未声明类型变量,则返回长度为 0 的数组。

指定者:

接口 GenericDeclaration 中的 getTypeParameters

返回:

表示此泛型声明所声明的类型变量的 TypeVariable 对象数组

Throws:

Throw名称 Throw描述
GenericSignatureFormatError 如果此泛型声明的泛型签名不符合《Java™ 虚拟机规范》中指定的格式

getSuperclass

public Class<? super T> getSuperclass()

返回表示此 Class 所表示的实体(类、接口、原始类型或 void)的超类的 Class。 如果此 Class 表示 Object 类、接口、原始类型或 void,则返回 null。 如果此对象表示数组类,则返回表示 Object 类的 Class 对象。

返回:

此对象表示的类的超类。

getGenericSuperclass

public Type getGenericSuperclass()

返回表示此 Class 所表示的实体(类、接口、原始类型或 void)的直接超类的 Type。

如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中使用的实际类型参数。 如果之前没有创建过表示超类的参数化类型,则会创建它。 有关参数化类型的创建过程的语义,请参见 ParameterizedType 的声明。 如果此 Class 表示 Object 类、接口、原始类型或 void,则返回 null。 如果此对象表示数组类,则返回表示 Object 类的 Class 对象。

返回:

此对象表示的类的超类

Throws:

Throw名称 Throw描述
GenericSignatureFormatError 如果泛型类签名不符合《Java™ 虚拟机规范》中指定的格式
TypeNotPresentException 如果泛型超类引用了不存在的类型声明
MalformedParameterizedTypeException 如果泛型超类引用了因任何原因无法实例化的参数化类型

getPackage

public Package getPackage()

获取此类的包。 该类的类加载器用于查找包。 如果该类是由引导类加载器加载的,则搜索从 CLASSPATH 加载的包集以找到该类的包。 如果此类的类加载器没有创建包对象,则返回 Null。

仅当信息在伴随类的清单中定义并且类加载器使用清单中的属性创建包实例时,包才具有版本和规范的属性。

返回:

类的包,如果归档或代码库中没有可用的包信息,则返回 null。

getInterfaces

public Class<?>[] getInterfaces()

确定此对象表示的类或接口实现的接口。

如果此对象表示一个类,则返回值是一个数组,其中包含表示该类实现的所有接口的对象。数组中接口对象的顺序对应于该对象所代表的类的声明的implements子句中接口名称的顺序。例如,给定声明:

Shimmer 类实现 FloorWax、DessertTopping { … }

假设 s 的值是 Shimmer 的一个实例;表达式的值:

s.getClass().getInterfaces()[0]

是表示接口 FloorWax 的 Class 对象;和价值:

s.getClass().getInterfaces()[1]

是表示接口 DessertTopping 的 Class 对象。

如果此对象表示一个接口,则该数组包含表示该接口扩展的所有接口的对象。数组中接口对象的顺序对应于该对象表示的接口声明的extends子句中接口名称的顺序。

如果此对象表示一个没有实现接口的类或接口,则该方法返回一个长度为 0 的数组。

如果此对象表示原始类型或 void,则该方法返回长度为 0 的数组。

如果此 Class 对象表示数组类型,则接口 Cloneable 和 java.io.Serializable 将按该顺序返回。

返回:

由此类实现的接口数组。

getGenericInterfaces

public Type[] getGenericInterfaces()

返回表示由该对象表示的类或接口直接实现的接口的类型。

如果超接口是参数化类型,则为其返回的 Type 对象必须准确反映源代码中使用的实际类型参数。如果之前没有创建过代表每个超接口的参数化类型,则创建它。有关参数化类型的创建过程的语义,请参见 ParameterizedType 的声明。

如果此对象表示一个类,则返回值是一个数组,其中包含表示该类实现的所有接口的对象。数组中接口对象的顺序对应于该对象所代表的类的声明的implements子句中接口名称的顺序。在数组类的情况下,接口 Cloneable 和 Serializable 按该顺序返回。

如果此对象表示一个接口,则该数组包含表示该接口直接扩展的所有接口的对象。数组中接口对象的顺序对应于该对象表示的接口声明的extends子句中接口名称的顺序。

如果此对象表示一个没有实现接口的类或接口,则该方法返回一个长度为 0 的数组。

如果此对象表示原始类型或 void,则该方法返回长度为 0 的数组。

返回:

由此类实现的接口数组

Throws:

Throw名称 Throw描述
GenericSignatureFormatError 如果泛型类签名不符合《Java™ 虚拟机规范》中指定的格式
TypeNotPresentException 如果任何通用超接口引用了不存在的类型声明
MalformedParameterizedTypeException 如果任何通用超接口引用了因任何原因无法实例化的参数化类型

getComponentType

public Class<?> getComponentType()

返回表示数组组件类型的 Class。 如果此类不表示数组类,则此方法返回 null。

返回:

如果此类是数组,则表示此类的组件类型的 Class

getModifiers

public int getModifiers()

返回此类或接口的 Java 语言修饰符,以整数编码。 修饰符由 Java 虚拟机的 public、protected、private、final、static、abstract 和 interface 常量组成; 它们应该使用类修饰符的方法进行解码。

如果底层类是一个数组类,那么它的 public、private 和 protected 修饰符与其组件类型的修饰符相同。 如果此类表示原始类型或 void,则其 public 修饰符始终为 true,其 protected 和 private 修饰符始终为 false。 如果此对象表示数组类、原始类型或 void,则其 final 修饰符始终为 true,其接口修饰符始终为 false。 本规范未确定其其他修饰符的值。

修饰符编码在 Java 虚拟机规范的表 4.1 中定义。

返回:

表示此类修饰符的 int

getSigners

public Object[] getSigners()

获取此类的签名者。

返回:

此类的签名者,如果没有签名者,则返回 null。 特别是,如果此对象表示原始类型或 void,则此方法返回 null。

getEnclosingMethod

public Method getEnclosingMethod() throws SecurityException

如果此 Class 对象表示方法中的本地或匿名类,则返回一个 Method 对象,该对象表示基础类的直接封闭方法。 否则返回 null。 特别是,如果基础类是直接由类型声明、实例初始化程序或静态初始化程序包围的本地或匿名类,则此方法返回 null。

返回:

底层类的直接封闭方法,如果该类是本地或匿名类; 否则为空。

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s 并且满足以下任一条件:调用者的类加载器与封闭类的类加载器不同并且使用 RuntimePermission(“accessDeclaredMembers”) 调用 SecurityManager#checkPermission 方法拒绝访问 对于封闭类中的方法调用者的类加载器与封闭类的类加载器不同或其祖先,并且调用 SecurityManager#checkPackageAccess 拒绝访问封闭类的包

getEnclosingConstructor

public Constructor<?> getEnclosingConstructor() throws SecurityException

如果此 Class 对象表示构造函数中的本地或匿名类,则返回表示基础类的直接封闭构造函数的 Constructor 对象。 否则返回 null。 特别是,如果基础类是直接由类型声明、实例初始化程序或静态初始化程序包围的本地或匿名类,则此方法返回 null。

返回:

底层类的直接封闭构造函数,如果该类是本地或匿名类; 否则为空。

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s 并且满足以下任一条件:调用者的类加载器与封闭类的类加载器不同并且使用 RuntimePermission(“accessDeclaredMembers”) 调用 SecurityManager#checkPermission 方法拒绝访问 对于封闭类中的构造函数,调用者的类加载器与封闭类的类加载器不同或不是其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问封闭类的包

getDeclaringClass

public Class<?> getDeclaringClass() throws SecurityException

如果此 Class 对象表示的类或接口是另一个类的成员,则返回表示在其中声明它的类的 Class 对象。 如果此类或接口不是任何其他类的成员,则此方法返回 null。 如果此 Class 对象表示数组类、原始类型或 void,则此方法返回 null。

返回:

这个类的声明类

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s,并且调用者的类加载器与声明类的类加载器不同或其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问声明类的包

getEnclosingClass

public Class<?> getEnclosingClass() throws SecurityException

返回基础类的直接封闭类。 如果底层类是顶级类,则此方法返回 null。

返回:

基础类的直接封闭类

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s,并且调用者的类加载器与封闭类的类加载器不同或其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问封闭类的包

getSimpleName

public String getSimpleName()

返回源代码中给出的基础类的简单名称。 如果基础类是匿名的,则返回一个空字符串。

数组的简单名称是附加了“[]”的组件类型的简单名称。 特别是组件类型为匿名的数组的简单名称是“[]”。

返回:

底层类的简单名称

getTypeName

public String getTypeName()

返回此类型名称的信息字符串。

指定者:

接口类型中的getTypeName

返回:

此类型名称的信息字符串

getCanonicalName

public String getCanonicalName()

返回 Java 语言规范定义的基础类的规范名称。 如果基础类没有规范名称(即,如果它是本地或匿名类或组件类型没有规范名称的数组),则返回 null。

返回:

如果存在,则为基础类的规范名称,否则为 null。

isAnonymousClass

public boolean isAnonymousClass()

当且仅当基础类是匿名类时才返回 true。

返回:

当且仅当此类是匿名类时才为真。

isLocalClass

public boolean isLocalClass()

当且仅当基础类是本地类时返回 true。

返回:

当且仅当此类是本地类时才为真。

isMemberClass

public boolean isMemberClass()

当且仅当基础类是成员类时才返回 true。

返回:

当且仅当此类是成员类时才为真。

getClasses

public Class<?>[] getClasses()

返回一个数组,其中包含表示所有公共类和接口的 Class 对象,这些公共类和接口是此 Class 对象表示的类的成员。 这包括从超类继承的公共类和接口成员以及类声明的公共类和接口成员。 如果此 Class 对象没有公共成员类或接口,则此方法返回长度为 0 的数组。 如果此 Class 对象表示原始类型、数组类或 void,则此方法还返回长度为 0 的数组。

返回:

表示此类的公共成员的 Class 对象数组

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s,并且调用者的类加载器与当前类的类加载器不同或其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问此类的包。

getFields

public Field[] getFields() throws SecurityException

返回一个包含 Field 对象的数组,该数组反映了此 Class 对象表示的类或接口的所有可访问公共字段。

如果此 Class 对象表示没有可访问的公共字段的类或接口,则此方法返回长度为 0 的数组。

如果此 Class 对象表示一个类,则此方法返回该类及其所有超类的公共字段。

如果此 Class 对象表示一个接口,则此方法返回该接口及其所有超接口的字段。

如果此 Class 对象表示数组类型、原始类型或 void,则此方法返回长度为 0 的数组。

返回数组中的元素没有排序,也没有任何特定的顺序。

返回:

表示公共字段的 Field 对象数组

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s,并且调用者的类加载器与当前类的类加载器不同或其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问此类的包。

getMethods

public Method[] getMethods() throws SecurityException

返回一个包含 Method 对象的数组,该对象反映了由此 Class 对象表示的类或接口的所有公共方法,包括由类或接口声明的那些以及从超类和超接口继承的那些。

如果此 Class 对象表示具有多个具有相同名称和参数类型但返回类型不同的公共方法的类型,则返回的数组对于每个此类方法都有一个 Method 对象。

如果此 Class 对象表示具有类初始化方法 <clinit> 的类型,则返回的数组没有对应的 Method 对象。

如果此 Class 对象表示一个数组类型,则返回的数组具有一个 Method 对象,用于该数组类型从 Object 继承的每个公共方法。它不包含用于 clone() 的 Method 对象。

如果此 Class 对象表示一个接口,则返回的数组不包含任何来自 Object 的隐式声明的方法。因此,如果在此接口或其任何超接口中没有显式声明任何方法,则返回的数组的长度为 0。(请注意,表示类的 Class 对象始终具有从 Object 继承的公共方法。)

如果此 Class 对象表示原始类型或 void,则返回的数组的长度为 0。

在此 Class 对象表示的类或接口的超接口中声明的静态方法不被视为类或接口的成员。

返回数组中的元素没有排序,也没有任何特定的顺序。

返回:

表示此类的公共方法的 Method 对象数组

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s,并且调用者的类加载器与当前类的类加载器不同或其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问此类的包。

getConstructors

public Constructor<?>[] getConstructors() throws SecurityException

返回一个包含 Constructor 对象的数组,该对象反映了此 Class 对象表示的类的所有公共构造函数。 如果类没有公共构造函数,或者类是数组类,或者类反映原始类型或 void,则返回长度为 0 的数组。 请注意,虽然此方法返回一个 Constructor<T> 对象数组(即此类的构造函数数组),但此方法的返回类型可能是 Constructor<?>[] 而不是 Constructor<T>[] 预期的。 这种信息量较少的返回类型是必要的,因为从该方法返回后,可以修改数组以保存不同类的 Constructor 对象,这将违反 Constructor<T>[] 的类型保证。

返回:

表示此类的公共构造函数的 Constructor 对象数组

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s,并且调用者的类加载器与当前类的类加载器不同或其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问此类的包。

getField

public Field getField(String name) throws NoSuchFieldException, SecurityException

返回一个反映此 Class 对象表示的类或接口的指定公共成员字段的 Field 对象。 name 参数是一个字符串,指定所需字段的简单名称。

要反射的场由下面的算法确定。 令 C 为该对象所代表的类或接口:

  1. 如果 C 声明了一个指定名称的公共字段,那就是要反映的字段。
  2. 如果在上面的步骤 1 中没有找到任何字段,则该算法递归地应用于 C 的每个直接超接口。直接超接口按照它们被声明的顺序进行搜索。
  3. 如果在上面的步骤 1 和 2 中没有找到字段,并且 C 具有超类 S,则在 S 上递归调用该算法。如果 C 没有超类,则抛出 NoSuchFieldException。

如果这个 Class 对象代表一个数组类型,那么这个方法没有找到数组类型的长度字段。

参数:

参数名称 参数描述
name 字段名称

返回:

由名称指定的此类的 Field 对象

Throws:

Throw名称 Throw描述
NoSuchFieldException 如果未找到具有指定名称的字段。
NullPointerException 如果名称为空
SecurityException 如果存在安全管理器 s,并且调用者的类加载器与当前类的类加载器不同或其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问此类的包。

getMethod

public Method getMethod(String name, Class<?>… parameterTypes) throws NoSuchMethodException, SecurityException

返回一个 Method 对象,该对象反映此 Class 对象表示的类或接口的指定公共成员方法。 name 参数是一个字符串,指定所需方法的简单名称。 parameterTypes 参数是一个 Class 对象数组,它们按照声明的顺序标识方法的形式参数类型。如果 parameterTypes 为 null,则将其视为空数组。

如果名称是“<init>”或“<clinit>”,则会引发 NoSuchMethodException。否则,要反映的方法由后面的算法决定。令 C 为该对象所代表的类或接口:

  1. C 搜索匹配方法,定义如下。如果找到匹配的方法,则将其反映。
  2. 如果步骤 1 没有找到匹配方法,则:
    1. 如果 C 是 Object 以外的类,则在 C 的超类上递归调用该算法。
    2. 如果 C 是类 Object,或者如果 C 是接口,则在 C 的超接口(如果有)中搜索匹配的方法。如果找到任何此类方法,则将其反映。

在类或接口 C 中找到匹配的方法:如果 C 声明了一个具有指定名称和完全相同的形参类型的公共方法,那就是反映的方法。如果在 C 中发现了多个这样的方法,并且其中一个方法的返回类型比其他任何方法都更具体,则反映该方法;否则任意选择其中一种方法。

请注意,一个类中可能有多个匹配方法,因为虽然 Java 语言禁止一个类声明具有相同签名但返回类型不同的多个方法,但 Java 虚拟机不会。虚拟机中这种增加的灵活性可用于实现各种语言功能。例如,协变返回可以用桥接方法来实现;桥接方法和被覆盖的方法将具有相同的签名,但返回类型不同。

如果这个 Class 对象代表一个数组类型,那么这个方法找不到 clone() 方法。

在此 Class 对象表示的类或接口的超接口中声明的静态方法不被视为类或接口的成员。

参数:

参数名称 参数描述
name 方法的名称
parameterTypes 参数列表

返回:

与指定名称和 parameterTypes 匹配的 Method 对象

Throws:

Throw名称 Throw描述
NoSuchMethodException 如果没有找到匹配的方法或者名称是“<init>”或“<clinit>”。
NullPointerException 如果名称为空
SecurityException 如果存在安全管理器 s,并且调用者的类加载器与当前类的类加载器不同或其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问此类的包。

getConstructor

public ConstructorT getConstructor(Class<?>… parameterTypes) throws NoSuchMethodException, SecurityException

返回一个 Constructor 对象,该对象反映此 Class 对象表示的类的指定公共构造函数。 parameterTypes 参数是一个 Class 对象数组,它们按照声明的顺序标识构造函数的形式参数类型。 如果此 Class 对象表示在非静态上下文中声明的内部类,则形式参数类型包括显式封闭实例作为第一个参数。

要反映的构造函数是此 Class 对象表示的类的公共构造函数,其形参类型与 parameterTypes 指定的类型匹配。

参数:

参数名称 参数描述
parameterTypes 参数数组

返回:

与指定 parameterTypes 匹配的公共构造函数的 Constructor 对象

Throws:

Throw名称 Throw描述
NoSuchMethodException 如果没有找到匹配的方法。
SecurityException 如果存在安全管理器 s,并且调用者的类加载器与当前类的类加载器不同或其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问此类的包。

getDeclaredClasses

public Class<?>[] getDeclaredClasses() throws SecurityException

返回一个 Class 对象数组,反映声明为此 Class 对象表示的类的成员的所有类和接口。 这包括类声明的公共、受保护、默认(包)访问以及私有类和接口,但不包括继承的类和接口。 如果类没有将类或接口声明为成员,或者如果此 Class 对象表示原始类型、数组类或 void,则此方法返回长度为 0 的数组。

返回:

表示该类的所有声明成员的 Class 对象数组

抛出:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s 并且满足以下任一条件:调用者的类加载器与此类的类加载器不同,并且使用 RuntimePermission(“accessDeclaredMembers”) 调用 SecurityManager#checkPermission 方法拒绝访问 此类中声明的类调用者的类加载器与当前类的类加载器不同或其祖先,并且 SecurityManager#checkPackageAccess 的调用拒绝访问此类的包

getDeclaredFields

public Field[] getDeclaredFields() throws SecurityException

返回一个 Field 对象数组,反映由此 Class 对象表示的类或接口声明的所有字段。 这包括公共、受保护、默认(包)访问和私有字段,但不包括继承的字段。

如果此 Class 对象表示没有声明字段的类或接口,则此方法返回长度为 0 的数组。

如果此 Class 对象表示数组类型、原始类型或 void,则此方法返回长度为 0 的数组。

返回数组中的元素没有排序,也没有任何特定的顺序。

返回:

表示该类的所有声明字段的 Field 对象数组

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s 并且满足以下任一条件:调用者的类加载器与此类的类加载器不同,并且使用 RuntimePermission(“accessDeclaredMembers”) 调用 SecurityManager#checkPermission 方法拒绝访问 此类中声明的字段调用者的类加载器与当前类的类加载器不同或其祖先,并且调用 SecurityManager#checkPackageAccess 拒绝访问此类的包

getDeclaredMethods

public Method[] getDeclaredMethods() throws SecurityException

返回一个包含 Method 对象的数组,该对象反映了此 Class 对象表示的类或接口的所有声明方法,包括公共、受保护、默认(包)访问和私有方法,但不包括继承方法。

如果此 Class 对象表示具有多个已声明的具有相同名称和参数类型但返回类型不同的方法的类型,则返回的数组对于每个此类方法都有一个 Method 对象。

如果此 Class 对象表示具有类初始化方法 <clinit> 的类型,则返回的数组没有对应的 Method 对象。

如果此 Class 对象表示没有声明方法的类或接口,则返回的数组的长度为 0。

如果此 Class 对象表示数组类型、原始类型或 void,则返回的数组的长度为 0。

返回数组中的元素没有排序,也没有任何特定的顺序。

返回:

Method 对象的数组,表示该类的所有声明的方法

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s 并且满足以下任一条件:调用者的类加载器与此类的类加载器不同,并且使用 RuntimePermission(“accessDeclaredMembers”) 调用 SecurityManager#checkPermission 方法拒绝访问 此类中声明的方法调用者的类加载器与当前类的类加载器不同或其祖先,并且调用 SecurityManager#checkPackageAccess 拒绝访问此类的包

getDeclaredConstructors

public Constructor<?>[] getDeclaredConstructors() throws SecurityException

返回一个 Constructor 对象数组,反映由该 Class 对象表示的类声明的所有构造函数。 这些是公共的、受保护的、默认(包)访问和私有构造函数。 返回的数组中的元素没有排序,也没有任何特定的顺序。 如果该类具有默认构造函数,则它包含在返回的数组中。 如果此 Class 对象表示接口、原始类型、数组类或 void,则此方法返回长度为 0 的数组。

请参阅 Java 语言规范,第 8.2 节。

返回:

表示该类的所有已声明构造函数的 Constructor 对象数组

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器 s 并且满足以下任一条件:调用者的类加载器与此类的类加载器不同,并且使用 RuntimePermission(“accessDeclaredMembers”) 调用 SecurityManager#checkPermission 方法拒绝访问 此类中声明的构造函数调用者的类加载器与当前类的类加载器不同或其祖先,并且调用 SecurityManager#checkPackageAccess 拒绝访问此类的包

getDeclaredField

public Field getDeclaredField(String name) throws NoSuchFieldException, SecurityException

返回一个反映此 Class 对象表示的类或接口的指定声明字段的 Field 对象。 name 参数是一个字符串,它指定所需字段的简单名称。

如果这个 Class 对象代表一个数组类型,那么这个方法没有找到数组类型的长度字段。

参数:

参数名称 参数描述
name 字段名称

返回:

此类中指定字段的 Field 对象

Throws:

Throw名称 Throw描述
NoSuchFieldException 如果未找到具有指定名称的字段。
NullPointerException 如果名称为空
SecurityException 如果存在安全管理器 s 并且满足以下任一条件:调用者的类加载器与此类的类加载器不同,并且使用 RuntimePermission(“accessDeclaredMembers”) 调用 SecurityManager#checkPermission 方法拒绝访问 声明的字段调用者的类加载器与当前类的类加载器不同或其祖先,并且调用 SecurityManager#checkPackageAccess 拒绝访问此类的包

getDeclaredMethod

public Method getDeclaredMethod(String name, Class<?>… parameterTypes) throws NoSuchMethodException, SecurityException

返回一个 Method 对象,该对象反映此 Class 对象表示的类或接口的指定声明方法。 name 参数是一个字符串,它指定所需方法的简单名称,parameterTypes 参数是一个 Class 对象数组,这些对象按照声明的顺序标识方法的形式参数类型。 如果在一个类中声明了多个具有相同参数类型的方法,并且其中一个方法的返回类型比其他任何方法都更具体,则返回该方法; 否则任意选择其中一种方法。 如果名称是“<init>”或“<clinit>”,则会引发 NoSuchMethodException。

如果这个 Class 对象代表一个数组类型,那么这个方法找不到 clone() 方法。

参数:

参数名称 参数描述
name 方法的名称
parameterTypes 参数数组

返回:

与指定名称和参数匹配的此类方法的 Method 对象

Throws:

Throw名称 Throw描述
NoSuchMethodException 如果没有找到匹配的方法。
NullPointerException 如果名称为空
SecurityException 如果存在安全管理器 s 并且满足以下任一条件:调用者的类加载器与此类的类加载器不同,并且使用 RuntimePermission(“accessDeclaredMembers”) 调用 SecurityManager#checkPermission 方法拒绝访问 声明的方法调用者的类加载器与当前类的类加载器不同或其祖先,并且调用 SecurityManager#checkPackageAccess 拒绝访问该类的包

getDeclaredConstructor

public ConstructorT getDeclaredConstructor(Class<?>… parameterTypes) throws NoSuchMethodException, SecurityException

返回一个 Constructor 对象,该对象反映此 Class 对象表示的类或接口的指定构造函数。 parameterTypes 参数是一个 Class 对象数组,它们按照声明的顺序标识构造函数的形式参数类型。 如果此 Class 对象表示在非静态上下文中声明的内部类,则形式参数类型包括显式封闭实例作为第一个参数。

参数:

参数名称 参数描述
parameterTypes 参数数组

返回:

具有指定参数列表的构造函数的 Constructor 对象

Throws:

Throw名称 Throw描述
NoSuchMethodException 如果没有找到匹配的方法。
SecurityException 如果存在安全管理器 s 并且满足以下任一条件:调用者的类加载器与此类的类加载器不同,并且使用 RuntimePermission(“accessDeclaredMembers”) 调用 SecurityManager#checkPermission 方法拒绝访问 声明的构造函数调用者的类加载器与当前类的类加载器不同或其祖先,并且调用 SecurityManager#checkPackageAccess 拒绝访问此类的包

getResourceAsStream

public InputStream getResourceAsStream(String name)

查找具有给定名称的资源。 搜索与给定类关联的资源的规则由该类的定义类加载器实现。 这个方法委托给这个对象的类加载器。 如果此对象由引导类加载器加载,则该方法委托给 ClassLoader#getSystemResourceAsStream。

在委托之前,使用以下算法从给定的资源名称构造一个绝对资源名称:

  • 如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称中“/”后面的部分。
  • 否则,绝对名称的格式如下:

modified_package_name/name

其中 modified_package_name 是此对象的包名称,其中 ‘/’ 替换为 ‘.’ (‘\u002e’)。

参数:

参数名称 参数描述
name 所需资源的名称

返回:

一个 InputStream 对象,如果没有找到同名的资源,则返回 null

Throws:

Throw名称 Throw描述
NullPointerException 如果名称为空

Since:

JDK1.1

getResource

public URL getResource(String name)

查找具有给定名称的资源。 搜索与给定类关联的资源的规则由该类的定义类加载器实现。 这个方法委托给这个对象的类加载器。 如果此对象由引导类加载器加载,则该方法委托给 ClassLoader#getSystemResource。

在委托之前,使用以下算法从给定的资源名称构造一个绝对资源名称:

  • 如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称中“/”后面的部分。
  • 否则,绝对名称的格式如下:

modified_package_name/name

其中 modified_package_name 是此对象的包名称,其中 ‘/’ 替换为 ‘.’ (‘\u002e’)。

参数:

参数名称 参数描述
name 所需资源的名称

返回:

如果没有找到具有此名称的资源,则为 URL 对象或 null

getProtectionDomain

public ProtectionDomain getProtectionDomain()

返回此类的 ProtectionDomain。 如果安装了安全管理器,此方法首先调用安全管理器的 checkPermission 方法,并带有 RuntimePermission(“getProtectionDomain”) 权限,以确保可以获取 ProtectionDomain。

返回:

此类的 ProtectionDomain

Throws:

Throw名称 Throw描述
SecurityException 如果存在安全管理器并且其 checkPermission 方法不允许获取 ProtectionDomain。

desiredAssertionStatus

public boolean desiredAssertionStatus()

如果要在调用此方法时对其进行初始化,则返回将分配给此类的断言状态。如果这个类已经设置了它的断言状态,将返回最近的设置;否则,如果任何包默认断言状态与此类有关,则返回最具体的相关包默认断言状态的最新设置;否则,如果该类不是系统类(即,它具有类加载器),则返回其类加载器的默认断言状态;否则,返回系统类默认断言状态。

很少有程序员需要这种方法;它是为了 JRE 本身的利益而提供的。 (它允许类在初始化时确定是否应启用断言。)请注意,此方法不能保证返回与指定类相关联的实际断言状态(或将要)。或将被)初始化。

返回:

指定类的所需断言状态。

isEnum

public boolean isEnum()

当且仅当此类在源代码中声明为枚举时才返回 true。

返回:

当且仅当该类在源代码中声明为枚举时才为真

getEnumConstants

public T[] getEnumConstants()

如果此 Class 对象不表示枚举类型,则返回此枚举类的元素或 null。

返回:

一个数组,其中包含组成此 Class 对象表示的枚举类的值,按它们声明的顺序,如果此 Class 对象不表示枚举类型,则为 null

cast

public T cast(Object obj)

将对象强制转换为此 Class 对象表示的类或接口。

参数:

参数名称 参数描述
obj 要投射的对象

返回:

转换后的对象,如果 obj 为 null,则为 null

Throws:

Throw名称 Throw描述
ClassCastException 如果对象不为 null 且不可分配给类型 T。

asSubclass

public <U> Class<? extends U> asSubclass(Class<U> clazz)

转换此 Class 对象以表示由指定类对象表示的类的子类。 检查强制转换是否有效,如果无效则抛出 ClassCastException。 如果此方法成功,它总是返回对此类对象的引用。

当客户端需要“缩小” Class 对象的类型以将其传递给限制它愿意接受的 Class 对象的 API 时,此方法很有用。 强制转换会生成编译时警告,因为无法在运行时检查强制转换的正确性(因为泛型类型是通过擦除实现的)。

类型参数:

类型参数名称 类型参数描述
U 将此类对象强制转换为的类型

参数:

参数名称 参数描述
clazz 要将此类对象转换为的类型的类

返回:

此 Class 对象,转换为表示指定类对象的子类。

Throws:

Throw名称 Throw描述
ClassCastException 如果这个 Class 对象不代表指定类的子类(这里的“子类”包括类本身)。

getAnnotation

public <A extends Annotation> A getAnnotation(Class<A> annotationClass)

从接口复制的描述:AnnotatedElement

如果存在这样的注释,则返回此元素的指定类型的注释,否则返回 null。

指定者:

接口 AnnotatedElement 中的 getAnnotation

类型参数:

类型参数名称 类型参数描述
A 要查询并返回的注释类型(如果存在)

参数:

参数名称 参数描述
annotationClass 注解类型对应的Class对象

返回:

此元素的指定注释类型的注释(如果存在于此元素上),否则为 null

Throws:

Throw名称 Throw描述
NullPointerException 如果给定的注释类为空

isAnnotationPresent

public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)

如果此元素上存在指定类型的注释,则返回 true,否则返回 false。 此方法主要是为了方便访问标记注释而设计的。

该方法返回的真值等价于:getAnnotation(annotationClass) != null

默认方法的主体被指定为上面的代码。

指定者:

接口 AnnotatedElement 中的 isAnnotationPresent

参数:

参数名称 参数描述
annotationClass 注解类型对应的Class对象

返回:

如果此元素上存在指定注释类型的注释,则为 true,否则为 false

Throws:

Throw名称 Throw描述
NullPointerException 如果给定的注释类为空

getAnnotationsByType

public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass)

从接口复制的描述:AnnotatedElement

返回与此元素关联的注释。 如果没有与该元素关联的注解,则返回值为长度为 0 的数组。该方法与 AnnotatedElement.getAnnotation(java.lang.Class) 的区别在于该方法检测其参数是否为可重复注解类型( JLS 9.6),如果是这样,则尝试通过“查看”容器注释来查找该类型的一个或多个注释。 该方法的调用者可以随意修改返回的数组; 它不会影响返回给其他调用者的数组。

指定者:

接口 AnnotatedElement 中的 getAnnotationsByType

类型参数:

类型参数名称 类型参数描述
A 要查询并返回的注释类型(如果存在)

参数:

参数名称 参数描述
annotationClass 注解类型对应的Class对象

返回:

如果与此元素相关联,则指定注释类型的所有此元素的注释,否则为长度为零的数组

Throws:

Throw名称 Throw描述
NullPointerException 如果给定的注释类为空

getAnnotations

public Annotation[] getAnnotations()

从接口复制的描述:AnnotatedElement

返回此元素上存在的注释。 如果此元素上没有注释,则返回值为长度为 0 的数组。此方法的调用者可以自由修改返回的数组; 它不会影响返回给其他调用者的数组。

指定者:

接口 AnnotatedElement 中的 getAnnotations

返回:

此元素上存在的注释

getDeclaredAnnotation

public <A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass)

从接口复制的描述:AnnotatedElement

如果直接存在这样的注释,则返回此元素的指定类型的注释,否则返回 null。 此方法忽略继承的注释。 (如果此元素上没有直接存在注释,则返回 null。)

指定者:

接口 AnnotatedElement 中的 getDeclaredAnnotation

类型参数:

类型参数名称 类型参数描述
A 要查询并返回的注释类型(如果直接存在)

参数:

参数名称 参数描述
annotationClass 注解类型对应的Class对象

返回:

如果直接存在于此元素上,则此元素的指定注释类型的注释,否则为 null

Throws:

Throw名称 Throw描述
NullPointerException 如果给定的注释类为空

getDeclaredAnnotations

public Annotation[] getDeclaredAnnotations()

从接口复制的描述:AnnotatedElement

返回此元素上直接存在的注释。 此方法忽略继承的注释。 如果此元素上没有直接存在注释,则返回值为长度为 0 的数组。此方法的调用者可以自由修改返回的数组; 它不会影响返回给其他调用者的数组。

指定者:

接口 AnnotatedElement 中的 getDeclaredAnnotations

返回:

直接出现在此元素上的注释

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《鸿蒙OS Class》
文章链接:https://zhuji.vsping.com/313313.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。