为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕丝7291255 2021-06-21 17:08:07
我正在尝试创建供应商列表。我有带有实例方法 getOne()、getTwo() 的 ClassA。然后在 ClassB 中,我有一种返回供应商列表的方法,如下所示:public List<Supplier<String>> getData(){    return Arrays.asList(        ClassA::getOne,        ClassA::getTwo    );}我不能使方法静态。我实际上需要从其他类调用 getData() 。另一个类不知道从哪个类调用什么方法。它只是从抽象类(在这种情况下 ClassA 扩展了一些抽象类)调用 getData() 并迭代列表并调用这些方法。所以这个其他类可以从抽象类的任何实例调用 getData()
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

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


ClassA instance = ...

for (Function<ClassA, String> method : getData()) {

    String result = method.apply(instance);

    System.out.println(result);

}

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


public List<Supplier<String>> getData(ClassA instance) {

    return Arrays.asList(

        instance::getOne,

        instance::getTwo

    );

}


查看完整回答
反对 回复 2021-06-23
  • 1 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信