Java反射获取对象的字段名和对应的类型和值

1、创建一个student的对象:

public class Student {

    private Integer id;

    private String name;

    private String sex;

    private String phone;

    public Student() {
    }

    public Student(Integer id, String name, String sex, String phone) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.phone = phone;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

2、利用反射获取student对象的字段名,类型,值:

public class UseReflexGetPOJOInfo {
    public static void main(String[] args) throws IllegalAccessException {

        Student student = new Student();
        student.setId(1);
        student.setName("张三");
        student.setSex("男");
        student.setPhone("13267356***");

        Integer id = student.getId();

        Field[] declaredFields = student.getClass().getDeclaredFields();
        for (Field declaredField : declaredFields) {
            //允许访问私有属性,此步骤需要,不然无法获取值(因为Student对象的字段用privae修饰)
            declaredField.setAccessible(true);
            String name = declaredField.getName();
            Class<?> type = declaredField.getType();
            //截取类型
            String str = String.valueOf(type);
            String substring = str.substring(str.lastIndexOf(".")+1);
            //获取值
            Object value = declaredField.get(student);

        }

    }
}
Java中,反射API允许我们在运行时检查和操作对象的信息,包括其字段类型。你可以使用`java.lang.reflect.Field`类及其相关方法来实现这个功能。下面是一个简单的示例: ```java import java.lang.reflect.Field; public class Main { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { // 假设有一个名为Person的对象,它有name和age两个字段 Person person = new Person("Alice", 25); // 获取Person类的Class对象 Class<?> clazz = person.getClass(); // 使用getDeclaredField获取name和age字段 Field nameField = clazz.getDeclaredField("name"); Field ageField = clazz.getDeclaredField("age"); // 检查并打印字段类型 System.out.println("Name field type: " + nameField.getType().getSimpleName()); System.out.println("Age field type: " + ageField.getType().getSimpleName()); // 设置Accessible为true,因为默认情况下,私有字段是不可见的 nameField.setAccessible(true); ageField.setAccessible(true); // 如果字段是字符串类型,尝试转换为Integer类型(假设存在类型不匹配的情况) if (nameField.getType() == String.class) { try { int ageAsInt = Integer.parseInt(nameField.get(person).toString()); System.out.println("Converted age as Integer: " + ageAsInt); } catch (NumberFormatException e) { System.out.println("Invalid age format"); } } } } ``` 在这个例子中,我们首先获取了`person`对象所属的类的`Class`对象,然后通过`getField`方法找到对应字段,最后使用`getType()`获取字段类型
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值