猿问

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

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


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

    return Arrays.asList(

        ClassA::getOne,

        ClassA::getTwo

    );

}

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


慕丝7291255
浏览 206回答 1
1回答

慕容3067478

假设调用者类有一个实例,ClassA并且您想指定要调用哪些方法,则需要使用Function接受实例并返回方法调用结果的 。换句话说,您需要将返回类型更改为List<Function<ClassA, String>>. 方法主体可以保持不变。要调用这些函数,您需要调用apply(),例如:ClassA instance = ...for (Function<ClassA, String> method : getData()) {&nbsp; &nbsp; String result = method.apply(instance);&nbsp; &nbsp; System.out.println(result);}或者,正如@Thilo所指出的,您可以让该方法接受一个实例并返回在提供的实例上调用方法的供应商列表:public List<Supplier<String>> getData(ClassA instance) {&nbsp; &nbsp; return Arrays.asList(&nbsp; &nbsp; &nbsp; &nbsp; instance::getOne,&nbsp; &nbsp; &nbsp; &nbsp; instance::getTwo&nbsp; &nbsp; );}
随时随地看视频慕课网APP

相关分类

Java
我要回答