我有一个类,它有多个返回相同类型的方法。因此,例如,我有以下对象定义:
interface MyClass {
String first();
String second();
}
然后我有一个方法,它接受此类的对象列表,并且应该根据参数调用 first()
或 second()
方法。一个例子:
void myMethod(List<MyClass> objs, boolean executeFirst) {
objs.forEach(obj -> System.out.println(executeFirst ? obj.first() : obj.second()));
}
是否有任何方法可以将 executeFirst
参数替换为对我想要在 objs
对象上执行的实例方法的引用?因此,举例来说,理想情况下我想要这样的东西:
void myMethod(List<MyClass> objs, Supplier<String> instanceMethod) {
objs.forEach(obj -> System.out.println(obj::instanceMethod.get());
}
最佳答案
您需要一个Function<MyClass, String>
,不是供应商:
public void foo() {
myMethod(someList, MyClass::first);
}
void myMethod(List<MyClass> objs, Function<MyClass, String> instanceMethod) {
objs.forEach(obj -> System.out.println(instanceMethod.apply(obj));
}
关于java-8 - 在 Java 8 中传递对实例方法的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48158160/