Rumah > Java > javaTutorial > teks badan

Bagaimana untuk mendapatkan nilai harta medan objek menggunakan refleksi Java?

王林
Lepaskan: 2023-04-22 23:01:14
ke hadapan
3673 orang telah melayarinya

Refleksi Java mendapat nilai atribut medan

Reflection mendapat semua medan kelas Java, termasuk semua medan dalam kelas induk. Medan kelas itu sendiri boleh diperoleh secara langsung melalui kaedah

getDeclaredFields() [dapatkan semua medan pengubah suai] atau getFields() [dapatkan medan diubah suai awam], tetapi tiada cara langsung untuk mendapatkan medan dalam kelas ibu bapa.

Anda perlu mendapatkan semua kelas induk secara rekursif, kemudian mendapatkan medannya dan akhirnya memperoleh semua medan kelas.

Jika anda ingin mendapatkan nilai medan, anda perlu menetapkan medan untuk boleh diakses: field.setAccessible(true); >

1. Kelas ibu bapa

2 semua bidang kelas pelajar
package com.carl.study.springboot.bean; 
import lombok.Data;
import lombok.experimental.Accessors;
 
/**
 * @author changez
 * @desc
 * @date 2019/3/10 11:30
 */
@Data
@Accessors(chain = true)
public class BeanBasic {
 
    private Integer id;
    private Long createTime;
    private Long updateTime;
}
Salin selepas log masuk

4. Output hasil
package com.carl.study.springboot.bean; 
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
 
/**
 * @author changez
 * @desc
 * @date 2019/3/10 11:17
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Accessors(chain = true)
public class Student extends BeanBasic{
 
    private String name;
    private String address;
}
Salin selepas log masuk

package test.lombok; 
import com.carl.study.springboot.bean.Student;
import org.junit.Test; 
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
/**
 * @author changez
 * @desc Java反射获取类的所有属性.
 * @date 2019/3/10 11:41
 */
public class LombokTest {
 
    @Test
    public void getParentField(){
        Student stu1 = new Student();
        stu1.setName("student-name")
            .setAddress("student1-address")
            .setId(1)
            .setCreateTime(20190310140423L)
            .setUpdateTime(20190310140423L)
        ;
 
        Class clazz = Student.class;
        List<Field> allFields = new ArrayList<>(100);
 
        // 获取当前对象的所有属性字段
        // clazz.getFields():获取public修饰的字段
        // clazz.getDeclaredFields(): 获取所有的字段包括private修饰的字段
        allFields.addAll(Arrays.asList(clazz.getDeclaredFields()));
 
        // 获取所有父类的字段, 父类中的字段需要逐级获取
        Class clazzSuper = clazz.getSuperclass();
 
        // 如果父类不是object,表明其继承的有其他类。 逐级获取所有父类的字段
        while (clazzSuper != Object.class) {
            allFields.addAll(Arrays.asList(clazzSuper.getDeclaredFields()));
            clazzSuper = clazzSuper.getSuperclass();
        }
 
        allFields.stream().forEach(field -> {
 
            // 设置字段可访问, 否则无法访问private修饰的变量值
            field.setAccessible(true);
            try {
                // 获取字段名称
                String fieldName = field.getName();
 
                // 获取指定对象的当前字段的值
                Object fieldVal = field.get(stu1);
                System.out.println(fieldName+"="+fieldVal);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        });
    }
}
Salin selepas log masuk
Objek pantulan memperoleh atribut dan nilai. ​​​​ke dalam rentetan

Penerangan

Kadang-kadang perlu untuk menyambung objek yang melintas dalam bentuk kv Dalam kes ini, adalah sangat baik untuk menggunakan pantulan

Bagaimana untuk mendapatkan nilai harta medan objek menggunakan refleksi Java?Pergi terus ke kod

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan nilai harta medan objek menggunakan refleksi Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan