是否可以将方法保存到变量中?
我有一个名为MyFilter的类,它在不同的字段上过滤Items.
MyFilter的构造函数应该问两件事:
>字符串,例如按语言过滤项目,“英语”
>这应该是一种方法
例如:
我有一个项目,我想检查语言==字符串给过滤器
所以我需要得到那个Item的语言,所以Item.getLanguage()……
我还需要Item.getTitle(),Item.getId()等等.
我认为这可能与lambda有关,但我不知道如何.
解决方法:
是的,您可以对任何方法进行变量引用.对于简单的方法,通常使用java.util.function就足够了.类.对于复杂方法,您必须使用此方法定义@FunctionalInterface.这是工作示例:
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
final Consumer simpleReference = Main::someMethod;
simpleReference.accept(1);
simpleReference.accept(2);
simpleReference.accept(3);
final ComplexInterface complexReference = Main::complexMethod;
final String complexResult = complexReference.someMethod("888", 321, new ArrayList<>());
System.out.println(complexResult);
}
private static void someMethod(int value) {
System.out.println(value);
}
private static String complexMethod(String stringValue, int intValue, List longList) {
final StringBuilder builder = new StringBuilder();
builder.append(stringValue).append(" : ").append(intValue);
for (Long longValue : longList) {
builder.append(longValue);
}
return builder.toString();
}
@FunctionalInterface
public static interface ComplexInterface{
String someMethod(String stringValue, int intValue, List longList);
}
}
标签:java,java-8,lambda
来源: https://codeday.me/bug/20190928/1829521.html