java獲取類中的屬性和值


java中反射是一種非常神奇的機制,通過反射,我可以知道我的某個類含有那些屬性,那些方法,繼承自那個類,又有什么樣的構造方法。如果我們要大量獲取類中的內容,但事先我並不知道這個類中有什么樣的屬性,有什么樣的方法,我們該怎么辦。按照一般的邏輯,是沒辦法實現的,因為未知的東西我沒辦法去已知其屬性。這樣就通過反射來實現了。

建立一個實體類:Dog

public class Dog {
private String name;
private String sex;
private int age;

public Dog() {
}


public Dog(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}


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 int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}

 

然后是一個測試類,Test:

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test {
public static void main(String[] args) {
Dog dog = new Dog("小黑", "雄", 2);
show(Dog.class, dog);
}

public static void show(Class<?> clazz, Object obj) {
Field[] fileds = clazz.getDeclaredFields();
for (Field f : fileds) {
System.out.println("----屬性:"+getFiled(f)+"--------值:"+getFieldValue(obj, getFiled(f)));
}
}

public static String getFiled(Field f) {
String str = f.toString().substring(f.toString().lastIndexOf('.') + 1,
f.toString().length());
return str.substring(0, 1).toUpperCase() + str.replaceFirst("\\w", "");
}



/**
* 獲取對象的屬性和屬性值
*
* @author ghj
* @param jointPoint
* @return
* @throws Throwable
*/


public static String getFieldValue(Object owner, String fieldName) {
if(invokeMethod(owner, fieldName, null)!=null){
return invokeMethod(owner, fieldName, null).toString();
}else{
return "null";
}
}

/**
*
* 執行某個Field的getField方法
*
* @param owner
* 類
* @param fieldName
* 類的屬性名稱
* @param args
* 參數,默認為null
* @return
*/
private static Object invokeMethod(Object owner, String fieldName, Object[] args) {
Class<? extends Object> ownerClass = owner.getClass();

// fieldName -> FieldName
String methodName = fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);

Method method = null;
try {
method = ownerClass.getMethod("get" + methodName);
} catch (SecurityException e) {

// e.printStackTrace();
} catch (NoSuchMethodException e) {
// e.printStackTrace();
return "";
}

// invoke getMethod
try {
return method.invoke(owner);
} catch (Exception e) {
return "";
}
}

}

 

然后得到測試的結果

----屬性:Name--------值:小黑
----屬性:Sex--------值:雄
----屬性:Age--------值:2

神奇的java

————————————————
版權聲明:本文為CSDN博主「等待守護」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/simle_yf_smile/article/details/11975209


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM