将方法保存到变量java 8中

是否可以将方法保存到变量中?
我有一个名为MyFilter的类,它在不同的字段上过滤Items。
MyFilter的构造函数应该问两件事:

  1. 字符串,例如按语言过滤项目,“英语”
  2. 这应该是一种方法

例如:

我有一个项目,我想检查语言==字符串给filter
所以我需要获得该Item的语言,所以Item.getLanguage()……
我还需要Item.getTitle(),Item.getId()等等。

我认为这可能与lambda有关,但我不知道如何。

是的,您可以对任何方法进行变量引用。 对于简单的方法,通常使用java.util.function.足够了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 8方法引用。 您可以使用:: ‘operator’从对象中获取方法引用。

 import java.util.function.IntConsumer; class Test { private int i; public Test() { this.i = 0; } public void inc(int x) { this.i += x; } public int get() { return this.i; } public static void main(String[] args) { Test t = new Test(); IntConsumer c = t::inc; c.accept(3); System.out.println(t.get()); // prints 3 } } 

您只需要一个与您要存储的方法的签名匹配的@FunctionalInterfacejava.util.function包含一些最常用的选项。

您可以使用方法参考,如 –

 System.out::println 

这相当于lambda表达式 –

 x -> System.out.println(x). 

此外,您可以使用reflection来存储方法,它也适用于早期版本的java