Heim >Java >javaLernprogramm >Wie erhalte ich den Eigenschaftswert eines Objektfelds mithilfe der Java-Reflektion?

Wie erhalte ich den Eigenschaftswert eines Objektfelds mithilfe der Java-Reflektion?

王林
王林nach vorne
2023-04-22 23:01:143711Durchsuche

Java Reflection ruft den Feldattributwert ab.

Reflection ruft alle Felder der Java-Klasse ab, einschließlich aller Felder in der übergeordneten Klasse. Die Felder der Klasse selbst können direkt über die Methode

getDeclaredFields() [alle Modifikatorfelder abrufen] oder getFields() [öffentliche geänderte Felder abrufen] abgerufen werden, die Felder in der übergeordneten Klasse jedoch nicht noch nicht gefunden und können direkt bezogen werden.

Sie müssen alle übergeordneten Klassen rekursiv abrufen, dann deren Felder abrufen und schließlich alle Felder der Klasse abrufen.

Wenn Sie den Feldwert erhalten möchten, müssen Sie das Feld so einstellen, dass es zugänglich ist: field.setAccessible(true); field ist die Field-Klasse unter dem Reflect-Paket

#🎜🎜 #Fall

1. Elternklasse

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;
}

2 # 3. Testen Sie die Klasse und erhalten Sie alle Felder der Schülerklasse

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;
}

4. Ergebnisausgabe

#🎜 🎜#

#🎜 🎜#Das Reflexionsobjekt erhält die Attribute und Werte in einer Zeichenfolge

Beschreibung

Wie erhalte ich den Eigenschaftswert eines Objektfelds mithilfe der Java-Reflektion?Manchmal ist es so Spleißen Sie die übergebenen Objekte in Form von kv. Dies wird verwendet. Reflexion ist sehr gut

Geben Sie den Code direkt ein

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();
            }
        });
    }
}
public class FanSeVo {
    private String name;
    private String id;
    //.......
    // 如果是跟外部程序或者接口对接的话,下面还可以加2个属性,一个是相互约定的秘钥,一个//是排除秘钥之后对属性和值做凭借之后的MD5加密之后的值,可以做数据安全考虑,防止传输过程数据被篡改
}

Das obige ist der detaillierte Inhalt vonWie erhalte ich den Eigenschaftswert eines Objektfelds mithilfe der Java-Reflektion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen