gpt4 book ai didi

java - 未知对象的调用方法

转载 作者:行者123 更新时间:2023-12-03 21:47:22 24 4
gpt4 key购买 nike

我有两个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com