我是靠谱客的博主 贤惠香烟,最近开发中收集的这篇文章主要介绍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


 

最后

以上就是贤惠香烟为你收集整理的java获取类中的属性和值的全部内容,希望文章能够帮你解决java获取类中的属性和值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部