Heim  >  Artikel  >  Java  >  Gemeinsame Nutzung von Java-Beispielcode zum Abrufen von Objektattributwerten basierend auf Reflektion

Gemeinsame Nutzung von Java-Beispielcode zum Abrufen von Objektattributwerten basierend auf Reflektion

黄舟
黄舟Original
2017-03-27 10:09:051525Durchsuche

Dieser Artikel stellt hauptsächlich die Methode von Java vor, um den Objekt--Attributwert basierend auf Reflexion zu erhalten. Er analysiert die zugehörigen Implementierungsmethoden und Betriebstechniken von Java, um den Wert zu erhalten Objektattributwerte basierend auf dem Beispielformular. Freunde, die es benötigen, können sich auf

beziehen. Das Beispiel in diesem Artikel beschreibt die Methode zum Abrufen von Objektattributwerten in Java basierend auf Reflexion. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Erhalten Sie die Attribute und Attributwerte im Objekt über den Reflexionsmechanismus. Es ist kein Problem, im Objekt privat zu sein, aber Manchmal werden Ausnahmen in anderen Klassen gemeldet. Das folgende Beispiel befindet sich in diesem Objekt:

/**
* Engine entity. @author MyEclipse Persistence Tools
*/
public class Engine implements java.io.Serializable {
 // Fields
 private Long engineId;
 private String engineName;
 private String engineType;
 // Constructors
 /** default constructor */
 public Engine() {
 }
 /** minimal constructor */
 public Engine(Long engineId) {
 this.engineId = engineId;
 }
 public Engine(String engineName, String engineType) {
 this.engineName = engineName;
 this.engineType = engineType;
 }
 /** full constructor */
 public Engine(Long engineId, String engineName, String engineType) {
 this.engineId = engineId;
 this.engineName = engineName;
 this.engineType = engineType;
 }
 // Property accessors
 public Long getEngineId() {
 return this.engineId;
 }
 public void setEngineId(Long engineId) {
 this.engineId = engineId;
 }
 public String getEngineName() {
 return this.engineName;
 }
 public void setEngineName(String engineName) {
 this.engineName = engineName;
 }
 public String getEngineType() {
 return this.engineType;
 }
 public void setEngineType(String engineType) {
 this.engineType = engineType;
 }
public static void main(String[] args) throws Exception {
 Engine m = new Engine("汽车","发动机");
 Class clazz = m.getClass();
 Field[] f = clazz.getDeclaredFields();
 String[] name = field2Name(f);
 Object[] value = field2Value(f, m);
 showNameAndValue(name, value);
 }
 public static void showNameAndValue(String[] name, Object[] value) {
 for (int i = 0; i < name.length; i++) {
  System.out.println("--" + i + "--");
  System.out.println("name:" + name[i]);
  System.out.println("Value:" + value[i]);
  System.out.println("--   --");
 }
 }
 public static String[] field2Name(Field[] f) {
 String[] name = new String[f.length];
 for (int i = 0; i < f.length; i++) {
  name[i] = f[i].getName();
 }
 return name;
 }
 public static Object[] field2Value(Field[] f, Object o) throws Exception {
 Object[] value = new Object[f.length];
 for (int i = 0; i < f.length; i++) {
  value[i] = f[i].get(o);
 }
 return value;
 }
}

Wenn Sie den Attributwert eines privaten Attributs aufrufen möchten, müssen Sie dessen Get-Methode aufrufen. Die spezifische Methode lautet:

Ändern Sie die field2Value-Methode zu Auf folgende Weise können private Attributwerte auch in anderen Klassen abgerufen werden

public static Object[] field2Value(Field[] fields, Object o) throws Exception {
 Object[] values = new Object[fields.length];
 Class classType = o.getClass();
 for (int i = 0; i < fields.length; i++) {
  String fieldName = fields[i].getName();
  String firstLetter = fieldName.substring(0, 1).toUpperCase();
  String getMethodName = "get" + firstLetter + fieldName.substring(1);
  Method getMethod = classType.getMethod(getMethodName, new Class[] {});
  values[i] = getMethod.invoke(o, new Object[] {});
 }
 return values;
}

Das obige ist der detaillierte Inhalt vonGemeinsame Nutzung von Java-Beispielcode zum Abrufen von Objektattributwerten basierend auf Reflektion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn