假设我们现在有一个实体类sys_config
1.获取该实体的信息有3种方法:
第一种(通过对象调用 getClass() 方法来获取,通常应用在:比如你传过来一个 Object 类型的对象,而我不知道你具体是什么类,用这种方法):
// 利用new实体来获取,适合测试练习使用
sys_config sc= new sys_config();
Class<? extends sys_config> class1 = sc.getClass();
System.out.println(class1); // class com.hokai.MybatisPlusDemo.entity.sys_config (class 具体的包名+类名)
System.out.println(class1.getName()); // com.hokai.MybatisPlusDemo.entity.sys_config (具体的包名+类名)
// 获取类的所有属性
Field[] fields = class1.getDeclaredFields();
for (Field field : fields) {
// field.getType().getName() 获取属性的数据类型的名称 例:java.lang.String 等
// field.getName() 获取类中属性的名称
System.out.println("对应的数据类型 :"+ field.getType().getName()+" 属性名:"+field.getName());
}
Method[] methods = class1.getDeclaredMethods();
for (Method method : methods) {
System.out.println("方法: "+method.getName());
}
第二种:
// 每个类都有一个静态的成员变量class
System.out.println(sys_config.class); //class com.hokai.MybatisPlusDemo.entity.sys_config
第三种:(通过 Class 对象的 forName() 静态方法来获取,也是最常用的方法,但必须要捕捉ClassNotFoundException 异常)
try {
Class<?> className = Class.forName("com.hokai.MybatisPlusDemo.entity.sys_config"); //指定类名
System.out.println(className); // class com.hokai.MybatisPlusDemo.entity.sys_config
System.out.println(className.getName()); // com.hokai.MybatisPlusDemo.entity.sys_config
int lastIndexOf = className.getName().lastIndexOf(".");
System.out.println(className.getName().substring(lastIndexOf+1));// sys_config
} catch (ClassNotFoundException e) {
//e.printStackTrace();
System.out.println("类没有找到,请核实!");
}
2.通过 Class 类获取成员变量、成员方法、接口、超类、构造方法等
查阅 API 可以看到 Class 有很多方法(上面我们通过3中获取到类的信息了,可以直接利用获取到的类信息来调用下面的API):
getName():获得类的完整名字。
getFields():获得类的public类型的属性。
getDeclaredFields():获得类的所有属性。包括private 声明的和继承类
getMethods():获得类的public类型的方法。
getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类
getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型。
getConstructors():获得类的public类型的构造方法。
getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。
newInstance():通过类的不带参数的构造方法创建这个类的一个对象。