我有两个 ArrayLists - ArrayList1 和 ArrayList2。它们中的每一个都填充有对象——分别是 Object1 和 Object2。 这两个对象都有“getText”方法。
对象 1:
public String getText() { return "1";}
对象 2:
public String getText() { return "2";}
在某些时候,我想使用相同的方法(只是使用不同的参数)遍历每个列表。
loopThroughList(1)
loopThroughList(2)
如果我想调用一个方法,但我不知道它是哪个对象,语法是什么?这是我到目前为止的代码:
for (Object o : lists.getList(listNumber)) {
System.out.println(o.getText());
}
它说无法解析方法 getText。我四处搜索并找到了另一个解决方案:
for (Object o : lists.getList(listNumber)) {
System.out.println(o.getClass().getMethod("getText"));
}
但这给我 NoSuchMethodException 错误。即使“getText”方法是公开的。
编辑:为了获得正确的列表,我调用了另一个对象(列表)的“getList”方法,该对象返回 ArrayList1 或 ArrayList2(取决于提供的参数)。
class Lists
public getList(list) {
if (list == 1) {
return ArrayList1;
}
else if (list == 2) {
return ArrayList2;
}
}
最佳答案
为 getText
定义一个接口(interface)方法
public interface YourInterface {
String getText();
}
在各自的类上实现接口(interface)
public class Object1 implements YourInterface {
@Override
public String getText() {
return "1";
}
}
public class Object2 implements YourInterface {
@Override
public String getText() {
return "2";
}
}
修改你的getList
返回方法 List<YourInterface>
public static List<YourInterface> getList(int list){
List<YourInterface> result = new ArrayList<>();
if(list == 1){
// your initial type
List<Object1> firstList = new ArrayList<>();
result.addAll(firstList);
} else {
// your initial type
List<Object2> secondList = new ArrayList<>();
result.addAll(secondList);
}
return result;
}
声明loopThroughList
public static void loopThroughList(List<YourInterface> list){
list.forEach(yourInterface -> System.out.println(yourInterface.getText()));
}
示例用法。
public static void main(String[] args) {
loopThroughList(getList(1));
loopThroughList(getList(2));
}
关于java - 未知对象的调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52666419/