简述
使用反射万事第一步,获取 Class
类。
获取Class对象的方式:
- Class.forName()
- Class.class
- Class.getClass()
获取Class对象
如何取得操作类的Class对象,常用的有三种方式: 使用Class的静态方法来获取一个要被反射的对象。
1.调用Class.forName();
代码语言:javascript复制public void test() {
Class cls = Class.forName("com.test.Person");
}
2.使用类的.class字节文件
代码语言:javascript复制public void test() {
Class<?> cls = String.class
}
3.调用对象的getClass方法
代码语言:javascript复制public void test() {
String str = "abc";
Class<?> cls = str.getClass();
}
验证相同类型class是一个对象
代码验证不同 class 获取 用来同的方式来获取,实际上都是同一个 Class 的实例。
代码语言:javascript复制public static void main(String[] args) {
TestClass testClass = new TestClass();
Class clazz1 = TestClass.class;
Class clazz2 = testClass.getClass();
System.out.println(TestClass.class == clazz1);
System.out.println(TestClass.class == clazz2);
}
结果:
true true
创建对象
创建对象需要使用到newInstance
这个功能。
public void test() {
Class<User> clazz = User.class;
User user = clazz.newInstance();
}
即便是泛型的对象也可以创建:
代码语言:javascript复制public T1 convert(Class<T1> clazz) {
T1 t = clazz.newInstance();
return t
}
获取对象类型
获取 object 具体类型
代码语言:javascript复制public void test() {
TestInterface testInterface = new TestInterfaceImpl();
String aaa = "cccc";
getObject(testInterface);
getObject(aaa);
}
public static void getObject(Object object) {
System.out.println(object.getClass().getTypeName());
}
结果:
com.liukai.auth.authorization.service.TestInterfaceImpl java.lang.String