通过方法进行“迭代”

2022-09-02 03:55:11

假设我有一个Java对象,它具有以下方法:

public String getField1();
public String getField2();
public String getField3();
public String getField4();
public String getField5();

有没有办法循环访问这些方法并调用它们,就像下面的代码一样?

String fields = "";
for(int i = 1; i <= 5; i ++){
   fields += object.(getField+i) + " | ";
}

感谢您即将到来的想法。


答案 1
Class yourClass = YourClass.class;
for (Method method : yourClass.getMethods()){
    method.invoke(obj, args);           
}

有关参考,请参阅本指南


答案 2

有一种方法可以使用反射:

try{
  Method m= object.getClass().getMethod("getField"+String.valueOf(i), new Class[]{});
  fields+=(String)m.invoke(object);
}catch(...){...}

然而:这项业务都闻起来很糟糕的编码实践!你不能像这样重写所有的方法吗?getFieldN()

String getField(int fieldNum)

您正在通过创建编号方法来自找麻烦。请记住,反射速度很慢,仅当基于 String 的方法调用对程序流绝对必要时才应使用。我有时会将此技术用于用户定义的脚本语言,您必须按名称获取方法。这里的情况根本不是这样,您的调用是整数索引的。因此,应将整数保留为参数。

如果这是遗留代码,并且您绝对无法更改此错误的编码,那么最好像上面那样创建一个新方法来包装现有方法,该方法仅委托给编号的方法。getMethod(int)getMethodN()