Java反射-Getter和Setters

时间:2020-01-09 10:36:20  来源:igfitidea点击:

使用Java Reflection,我们可以检查类的方法并在运行时调用它们。这可用于检测给定类具有哪些获取器和设置器。我们不能明确要求getter和setter,因此我们将不得不遍历一个类的所有方法,并检查每个方法是getter还是setter。

首先,让我们建立表征getter和setter方法的规则:

  • Getter getter方法的名称以" get"开头,采用0个参数,并返回一个值。
  • 设置器设置器方法的名称以" set"开头,并带有1个参数。

设置员可能会或者可能不会返回值。一些设置器返回void,一些设置器返回值,另一些返回调用该设置器的对象以用于方法链接。因此,我们不应对setter的返回类型做任何假设。

这是一个代码示例,该代码查找类的getter和setter:

public static void printGettersSetters(Class aClass){
  Method[] methods = aClass.getMethods();

  for(Method method : methods){
    if(isGetter(method)) System.out.println("getter: " + method);
    if(isSetter(method)) System.out.println("setter: " + method);
  }
}

public static boolean isGetter(Method method){
  if(!method.getName().startsWith("get"))      return false;
  if(method.getParameterTypes().length != 0)   return false;  
  if(void.class.equals(method.getReturnType()) return false;
  return true;
}

public static boolean isSetter(Method method){
  if(!method.getName().startsWith("set")) return false;
  if(method.getParameterTypes().length != 1) return false;
  return true;
}