java反射基础,根据get方法获取对象属性值

J2EE 码拜 4年前 (2016-01-29) 153次浏览
public class Data {
	private Double d1;
	private Double d2;
	
	public Double getD1() {
		return d1;
	}
	public void setD1(Double d1) {
		this.d1 = d1;
	}
	public Double getD2() {
		return d2;
	}
	public void setD2(Double d2) {
		this.d2 = d2;
	}
	
}
	public static void main(String[] args) {
		
		Data data = new Data();
		data.setD1(33.3);
		
		Class c = data.getClass();
		
		try {
			for (Field field : c.getDeclaredFields()) {
				String fieldName = field.getName();
				String fieldType = field.getType().toString();
				if(fieldName.equals("d1")){
					System.out.println(fieldName + "\t" + fieldType);
					Method m = c.getDeclaredMethod("getD1", field.getType());
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

为啥报错:
d1 class java.lang.Double
java.lang.NoSuchMethodException: com.dataservice.Data.getD1(java.lang.Double)
at java.lang.Class.getDeclaredMethod(Unknown Source)
at com.dataservice.WJFOtherTest.main(WJFOtherTest.java:134)

解决方案:20分
Class.getDeclaredMethod(String name, Class<?>... parameterTypes)
parameterTypes 是前面方法的参数类型,getD1没有参数。
第14行,Method m = c.getDeclaredMethod("getD1", field.getType());
反射的是getD1(java.lang.Double)方法
自然找不到,抛 java.lang.NoSuchMethodException: com.dataservice.Data.getD1(java.lang.Double)异常
改成 Method m = c.getDeclaredMethod("getD1"); 即可。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java反射基础,根据get方法获取对象属性值
喜欢 (0)
[1034331897@qq.com]
分享 (0)