首页 > 解决方案 > 未知对象的调用方法

问题描述

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

标签: javaclassobjectnosuchmethoderror

解决方案


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));
}

推荐阅读