方法引用 - 不能从静态上下文中引用非静态方法

Method reference - non-static method cannot be referenced from a static context

我正在尝试创建供应商列表。我有带有实例方法 getOne()、getTwo() 的 ClassA。然后在 ClassB 中,我有一个方法 return 供应商列表如下:

public List<Supplier<String>> getData(){
    return Arrays.asList(
        ClassA::getOne,
        ClassA::getTwo
    );
}

我无法将方法设为静态。我实际上需要从其他 class 调用 getData()。另一个 class 不知道从哪个 class 调用什么方法。它只是从抽象 class 调用 getData() (在这种情况下,ClassA 扩展了一些抽象 class)并迭代列表并调用这些方法。所以这个其他 class 可以从抽象 class

的任何实例调用 getData()

假设调用者 class 有一个 ClassA 的实例并且您想指定要调用的方法,您需要使用接受该实例的 Function 和 returns 方法调用的结果。换句话说,您需要将 return 类型更改为 List<Function<ClassA, String>>。方法体可以保持不变。要调用函数,您需要调用 apply(),例如:

ClassA instance = ...
for (Function<ClassA, String> method : getData()) {
    String result = method.apply(instance);
    System.out.println(result);
}

或者,正如 所指出的,您可以让方法接受一个实例和 return 在提供的实例上调用方法的供应商列表:

public List<Supplier<String>> getData(ClassA instance) {
    return Arrays.asList(
        instance::getOne,
        instance::getTwo
    );
}