Java Method
缘起
今天通过反射去获取一个 bean 的所有 get*()
方法。
- User.class
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
- getMethodsTest()
@Test
public void getMethodsTest() {
Class clazz = User.class;
Method[] methods = clazz.getDeclaredMethods();
for(Method method : methods) {
String methodName = method.getName();
if(methodName.startsWith("get")) {
System.out.println(methodName);
}
}
}
result
getName
getAge
另一种
当然本文想说的不是上一种方法。我个人认为依据字符串判断的方法不太方便,记得 Java 提供了直接获取 get*() 的对应方法。
于是就查了一下,也可以用如下方式实现:
@Test
public void propertyDescriptorTest() throws IntrospectionException {
Class clazz = User.class;
Field[] fields = clazz.getDeclaredFields();//获得属性
for (Field field : fields) {
PropertyDescriptor pd = new PropertyDescriptor(field.getName(), clazz);
Method getMethod = pd.getReadMethod();//获得get方法
System.out.println(getMethod.getName());
}
}
result
getName
getAge
这种方法是有缺陷的,只适用于拥有对应属性且有对应 get 方法。