方法引用 - 不能从静态上下文中引用非静态方法
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
);
}
我正在尝试创建供应商列表。我有带有实例方法 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);
}
或者,正如
public List<Supplier<String>> getData(ClassA instance) {
return Arrays.asList(
instance::getOne,
instance::getTwo
);
}