java反射02-使用Class对象

2023-10-20 10:15:46 浏览数 (1)

简述

使用反射万事第一步,获取 Class 类。 获取Class对象的方式:

  1. Class.forName()
  2. Class.class
  3. 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这个功能。

代码语言:javascript复制
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

0 人点赞