java - 未知对象的调用方法

标签 java class object nosuchmethoderror

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

相关文章:

java_为什么打印成员变量给出实际值?

javascript - 在javascript中创建多维关联数组

java - 简单 xml : how to annotate my "point" class

c++ - 如何定义派生类的非成员构造函数(在类头中)

c++ - 在类层次结构中初始化变量

java - 如何在java中匹配另一个类中的arraylist数据

javascript - 操作对象文字: add property in certain order

java - 尝试显示/取消隐藏 LinearLayout 时无法调用 setVisibility 方法

java - Entity Beans 不允许定义 Map<String, Object> 属性

java - 如果 Hibernate 已经存在,为什么要插入具有相同键的新实体?