通过方法"迭代"

14 java methods call method-call

假设我有一个Java对象,其中包括以下方法:

public String getField1();
public String getField2();
public String getField3();
public String getField4();
public String getField5();
Run Code Online (Sandbox Code Playgroud)

有没有办法迭代这些方法并像下面的代码一样调用它们?

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

感谢您即将到来的想法.

Alb*_*gni 15

Class yourClass = YourClass.class;
for (Method method : yourClass.getMethods()){
    method.invoke(obj, args);           
}
Run Code Online (Sandbox Code Playgroud)

请参阅本指南以供参考.


San*_*har 9

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

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

但是: 这项业务都有不好的编码习惯!难道你不能重写这样的所有getFieldN()方法吗?

String getField(int fieldNum)
Run Code Online (Sandbox Code Playgroud)

您通过创建编号方法来解决问题.请记住,反射很慢,只应在基于String的方法调用对程序流程绝对必要时使用.我有时会将此技术用于用户定义的脚本语言,您必须按名称获取方法.在这里根本不是这种情况,你的调用是整数索引的.因此,您应该将整数作为参数.

如果这是遗留代码并且您绝对无法更改此错误编码,那么您可能最好创建一个新方法getMethod(int),以包装现有方法,只需委托编号getMethodN()方法.