概述
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
最后
以上就是贤惠香烟为你收集整理的java获取类中的属性和值的全部内容,希望文章能够帮你解决java获取类中的属性和值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复