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)
请参阅本指南以供参考.
有一种方法可以使用反射:
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()方法.