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"); 即可。