返回值 | 方法说明 |
---|---|
<U> Class<? extends U> | asSubclass(Class<U> clazz)强制转换该 Class 对象,以表示指定的 class 对象所表示的类的一个子类。 |
static Class<?> | forName(String className)返回与带有给定字符串名的类或接口相关联的 Class 对象。 |
<A extends Annotation>A | getAnnotation(Class<A> annotationClass)如果存在该元素的指定类型的注解,则返回这些注解,否则返回 null。 |
Annotation[] | getAnnotations()返回此元素上存在的所有注解。 |
ClassLoader | getClassLoader()返回该类的类加载器。 |
Class<?> | getComponentType()返回表示数组组件类型的 Class。 |
Annotation[] | getDeclaredAnnotations() 返回直接存在于此元素上的所有注解。 |
Class<?> | getDeclaringClass()如果此 Class 对象所表示的类或接口是另一个类的成员,则返回的 Class 对象表示该对象的声明类。 |
T[] | getEnumConstants()如果此 Class 对象不表示枚举类型,则返回枚举类的元素或 null。 |
Type[] | getGenericInterfaces()返回表示某些接口的 Type,这些接口由此对象所表示的类或接口直接实现。 |
Type | getGenericSuperclass()返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。 |
Class<?>[] | getInterfaces()确定此对象所表示的类或接口实现的接口。 |
int | getModifiers()返回此类或接口以整数编码的 Java 语言修饰符。 |
String | getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。 |
String | getCanonicalName()返回 Java Language Specification 中所定义的底层类的规范化名称。主要用于输出(toString)或log打印,大多数情况下和getName()一样,但是在内部类、数组等类型的表示形式就不同了。不能用getCanonicalName()去加载类对象,必须用getName(), |
Package | getPackage()获取此类的包。 |
InputStream | getResourceAsStream(String name)查找具有给定名称的资源。 |
String | getSimpleName()返回源代码中给出的底层类的简称。 |
Class<? super T> | getSuperclass()返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。 |
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)如果obj是这个类的一个实例此方法返回true。 |
boolean | isInterface()判定指定的 Class 对象是否表示一个接口类型。 |
boolean | isLocalClass()当且仅当这个类是局部类此方法返回true。 |
boolean | isMemberClass()当且仅当底层类是成员类时返回 true。 |
boolean | isPrimitive()判定指定的 Class 对象是否表示一个基本类型。 |
T | newInstance()创建此 Class 对象所表示的类的一个新实例。 |
想通过反射创建对象大概有以下几种方式:
Class.newInstance()
直接创建对象。Constructor
(构造器),通过构造器创建对象。获取构造方法的途径有以下几种:
返回值 | 方法说明 |
---|---|
Constructor | getConstructor(Class<?>... parameterTypes)返回一个 Constructor 对象,它反映此 Class 对象所表示的类的public构造方法。 |
Constructor<?>[] | getConstructors()返回所有 Constructor 对象,它反映此 Class 对象所表示的类的public构造方法。 |
Constructor | getDeclaredConstructor(Class<?>... parameterTypes)返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类的public/private构造方法。 |
Constructor<?>[] | getDeclaredConstructor()返回所有 Constructor 对象,该对象反映此 Class 对象所表示的类的public/private构造方法。 |
示例代码如下:
@Getter
@Setter
@ToString
public class User {
private String name;
private Integer age;
public User() {
this.name = "张三";
this.age = 24;
}
public boolean isAdmin(String name) {
if("admin".equals(name)) {
return true;
}
return false;
}
}
@Slf4j
public class Test {
public static void main(String[] args) throws Exception {
Class<User> userClass = User.class;
User user = userClass.newInstance();
Constructor<User> constructor = userClass.getConstructor();
User user1 = constructor.newInstance();
Constructor<User> declaredConstructor = userClass.getDeclaredConstructor();
// 如果构造器为private,则可以设置访问权限为true,即可newInstance
declaredConstructor.setAccessible(true);
User user2 = declaredConstructor.newInstance();
log.info(user.toString());
log.info(user1.toString());
log.info(user2.toString());
}
}
输出内容如下:
15:59:01.653 [main] INFO com.ldx.test.Test - User(name=张三, age=24)
15:59:01.663 [main] INFO com.ldx.test.Test - User(name=张三, age=24)
15:59:01.663 [main] INFO com.ldx.test.Test - User(name=张三, age=24)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。