反射练习
代码
package com.ws.practise.reflcet;
import lombok.Data;
/**
* @author 王顺
* @description
* @date 2022/4/14
*/
@Data
public class Animal {
private String id;
private String name;
private String age;
public Animal() {
}
public Animal(String id, String name, String age) {
this.id = id;
this.name = name;
this.age = age;
}
private void eat(){
System.out.println("动物吃东西");
}
private void walk(){
System.out.println("动物行走");
}
}
package com.ws.practise.reflcet;
import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* @author 王顺
* @description
* @date 2022/4/14
*/
public class testReflect {
@Test
public void test1(){
try {
//class.forname获取
Class<?> animalClass = Class.forName("com.ws.practise.reflcet.Animal");
Constructor<?>[] constructors = animalClass.getConstructors();
Field[] declaredFields = animalClass.getDeclaredFields();
Method[] declaredMethods = animalClass.getDeclaredMethods();
//通过 对象.getClass()获取
// Animal animal = new Animal();
// Class<? extends Animal> animalClass = animal.getClass();
// Constructor<?>[] constructors = animalClass.getConstructors();
// Field[] declaredFields = animalClass.getDeclaredFields();
// Method[] declaredMethods = animalClass.getDeclaredMethods();
//通过 类.class获取
// Class<Animal> animalClass = Animal.class;
// Constructor<?>[] constructors = animalClass.getConstructors();
// Field[] declaredFields = animalClass.getDeclaredFields();
// Method[] declaredMethods = animalClass.getDeclaredMethods();
//遍历输出
for (Constructor constructor : constructors) {
System.out.println("-----开始打印该类构造器---------共有"+constructors.length+"个构造器");
System.out.println("constructor.toGenericString()="+constructor.toGenericString());
System.out.println("constructor.toString()="+constructor.toString());
System.out.println("constructor.getName()="+constructor.getName());
System.out.println("-----结束打印该类构造器---------");
}
for (Field field : declaredFields) {
System.out.println("-----开始打印该类属性---------共有"+declaredFields.length+"个属性");
System.out.println("field.getName()"+field.getName());
System.out.println("field.toString()"+field.toString());
System.out.println("field.toGenericString()"+field.toGenericString());
System.out.println("-----结束打印该类属性---------");
}
for (Method method : declaredMethods) {
System.out.println("-----开始打印该类方法---------共有"+declaredMethods.length+"个方法");
System.out.println("method.getName()"+method.getName());
System.out.println("method.toString()"+method.toString());
System.out.println("method.toGenericString()"+method.toGenericString());
System.out.println("-----结束打印该类方法---------");
}
} catch (Exception e) {
System.out.println("出错啦");
}
}
}
-----开始打印该类构造器---------共有2个构造器
constructor.toGenericString()=public com.ws.practise.reflcet.Animal()
constructor.toString()=public com.ws.practise.reflcet.Animal()
constructor.getName()=com.ws.practise.reflcet.Animal
-----结束打印该类构造器---------
-----开始打印该类构造器---------共有2个构造器
constructor.toGenericString()=public com.ws.practise.reflcet.Animal(java.lang.String,java.lang.String,java.lang.String)
constructor.toString()=public com.ws.practise.reflcet.Animal(java.lang.String,java.lang.String,java.lang.String)
constructor.getName()=com.ws.practise.reflcet.Animal
-----结束打印该类构造器---------
-----开始打印该类属性---------共有3个属性
field.getName()id
field.toString()private java.lang.String com.ws.practise.reflcet.Animal.id
field.toGenericString()private java.lang.String com.ws.practise.reflcet.Animal.id
-----结束打印该类属性---------
-----开始打印该类属性---------共有3个属性
field.getName()name
field.toString()private java.lang.String com.ws.practise.reflcet.Animal.name
field.toGenericString()private java.lang.String com.ws.practise.reflcet.Animal.name
-----结束打印该类属性---------
-----开始打印该类属性---------共有3个属性
field.getName()age
field.toString()private java.lang.String com.ws.practise.reflcet.Animal.age
field.toGenericString()private java.lang.String com.ws.practise.reflcet.Animal.age
-----结束打印该类属性---------
-----开始打印该类方法---------共有12个方法
method.getName()equals
method.toString()public boolean com.ws.practise.reflcet.Animal.equals(java.lang.Object)
method.toGenericString()public boolean com.ws.practise.reflcet.Animal.equals(java.lang.Object)
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()toString
method.toString()public java.lang.String com.ws.practise.reflcet.Animal.toString()
method.toGenericString()public java.lang.String com.ws.practise.reflcet.Animal.toString()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()hashCode
method.toString()public int com.ws.practise.reflcet.Animal.hashCode()
method.toGenericString()public int com.ws.practise.reflcet.Animal.hashCode()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()getName
method.toString()public java.lang.String com.ws.practise.reflcet.Animal.getName()
method.toGenericString()public java.lang.String com.ws.practise.reflcet.Animal.getName()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()getId
method.toString()public java.lang.String com.ws.practise.reflcet.Animal.getId()
method.toGenericString()public java.lang.String com.ws.practise.reflcet.Animal.getId()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()setName
method.toString()public void com.ws.practise.reflcet.Animal.setName(java.lang.String)
method.toGenericString()public void com.ws.practise.reflcet.Animal.setName(java.lang.String)
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()walk
method.toString()private void com.ws.practise.reflcet.Animal.walk()
method.toGenericString()private void com.ws.practise.reflcet.Animal.walk()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()eat
method.toString()private void com.ws.practise.reflcet.Animal.eat()
method.toGenericString()private void com.ws.practise.reflcet.Animal.eat()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()getAge
method.toString()public java.lang.String com.ws.practise.reflcet.Animal.getAge()
method.toGenericString()public java.lang.String com.ws.practise.reflcet.Animal.getAge()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()canEqual
method.toString()protected boolean com.ws.practise.reflcet.Animal.canEqual(java.lang.Object)
method.toGenericString()protected boolean com.ws.practise.reflcet.Animal.canEqual(java.lang.Object)
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()setId
method.toString()public void com.ws.practise.reflcet.Animal.setId(java.lang.String)
method.toGenericString()public void com.ws.practise.reflcet.Animal.setId(java.lang.String)
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()setAge
method.toString()public void com.ws.practise.reflcet.Animal.setAge(java.lang.String)
method.toGenericString()public void com.ws.practise.reflcet.Animal.setAge(java.lang.String)
-----结束打印该类方法---------
项目中什么时候能用到
基本无时无刻不在用到,只不过都给封装过了。
- 在进行两个类属性互换的时候
public static void copyProperties(Object source, Object target) throws BeansException {
copyProperties(source, target, null, (String[]) null);
}
- 在进行实体类和map的转化中,当实体类的字段很多很多时候,就会使用反射进行Field[],for循环进行赋值