反射、泛型、JDBC 等基础结合起来很多时候可以使代码功能更加强大,适合更多的场景使用
一个通过反射获得属性名、属性类型、属性值的示例:
import lombok.Builder;import lombok.Data;import lombok.ToString;import java.lang.reflect.Field;public class ReflectTest { public static void reflect(T t){ // 获取所有属性 // getDeclaredFields 不包含父类,包含私有属性 // getFields 包含父类属性 Field[] fields = t.getClass().getDeclaredFields(); for (Field field : fields) { String fieldName = field.getName(); // 设置私有属性的访问权限 field.setAccessible(true); // 获取属性类型 Class> type = field.getType(); String typeName = field.getType().getName(); String typeSimpleName = field.getType().getSimpleName(); Object fieldValue = null; try { // 获取属性类型值 fieldValue = field.get(t); } catch (IllegalAccessException e) { e.printStackTrace(); } System.out.println("属性:" + fieldName + ",类型:" +typeSimpleName+"(class:"+type+",typeName:"+typeName+"),值:" +fieldValue); } } public static void main(String[] args) { User user = User.builder().id(1).username("zhangsan").sex("男").age(19).addr("北京").build(); ReflectTest.reflect(user); }}@Data@Builder@ToStringclass User { private int id; private String username; private String sex = "男"; private Integer age; private String addr;}
执行,输出:
属性:id,类型:int(class:int,typeName:int),值:1属性:username,类型:String(class:class java.lang.String,typeName:java.lang.String),值:zhangsan属性:sex,类型:String(class:class java.lang.String,typeName:java.lang.String),值:男属性:age,类型:Integer(class:class java.lang.Integer,typeName:java.lang.Integer),值:19属性:addr,类型:String(class:class java.lang.String,typeName:java.lang.String),值:北京
来源地址:https://blog.csdn.net/zhy0414/article/details/130148858