java - 未知对象的调用方法
问题描述
我有两个 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
为方法定义接口
public interface YourInterface {
String getText();
}
在相应的类上实现接口
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));
}
推荐阅读
- c# - 如何防止 ControlTemplate 中的控件被调整大小?
- android - Android Activity 引用在内存不足时为空
- intellij-idea - 从 IDE 中启动文件
- php - 我在apache中配置了Configure SSL,后来通过下面链接中的步骤安装了mysql,php,之后尝试打开php时出现错误
- android - 从 Cursor 读取时出现 IndexOutOfBoundException
- kubernetes - 在 Kubernetes 中更新 Kafka 会导致停机
- asp.net-web-api - ASP.NET Web Api 属性路由和查询字符串
- java - Spring Service 垃圾回收
- python - 如何在 Python 套接字中接收和组装可变长度的字节数组?
- sip - 在 Ubuntu Pjsip PJproject 上配置//make 错误