从存储在属性中的子类调用方法

时间:2014-10-23 22:06:13

标签: java design-patterns

我正在为我的项目创建验证课程。 目前,我仍然坚持要从通过泛型类型传递的类调用方法(在本例中为getText())。

以下是代码:

在这个类中,我创建了一个getRules,我在其中传递一个HashMap,其中key是字段的名称,以及附加到它的规则中的值。

public class PlayerValidator extends FormValidator<PlayerFormPanel> {
  @Override
  protected HashMap<String, String> getRules() {
    HashMap<String, String> rules = new HashMap<>();
    rules.put("firstNameField", "required");

    return rules;
  }
}

接下来,我得到了一个父类,我在其中获得了一个验证方法,该方法将迭代规则并检查规则是有效还是无效。

abstract class FormValidator<T> {

  abstract HashMap<String, String> getRules();

  public void validate(T form) {
    System.out.println(form.toString());

    for (Map.Entry<String, String> field : getRules().entrySet()) {
        System.out.println(field.getKey());
        System.out.println(field.getValue());
    }
  }
}

在泛型类型T中,我获得了PlayerFormPanel对象,但是如何在getText()(field.getKey()上调用firstNameField方法)?

1 个答案:

答案 0 :(得分:0)

您应该使用Introspector或反射

for(PropertyDescriptor prop : Introspector.getBeanInfo(class).getPropertyDescriptors()){
  System.out.println(prop.getReadMethod());
}  

此问题可能重复: Java Reflection: How can i get the all getter methods of a java class and invoke them