【发布时间】:2014-07-20 13:01:56
【问题描述】:
我是 Java 8 的新手,想知道是否可以将实例方法传递给另一个方法,该方法又在 lambda 参数上调用它:
考虑这个类:
import java.util.function.Predicate;
public class PredicateTest {
private class SomeType {
public boolean bar() {
return true;
}
public boolean foo() {
return true;
}
}
public void someMethod() {
Predicate<SomeType> firstPredicate = someType -> someType.bar();
Predicate<SomeType> secondPredicate = someType -> someType.foo();
//...
}
public Predicate<SomeType> getGenericPredicate(/* ?? what goes here ?? */) {
Predicate<SomeType> predicate = someType -> someType./* ?? how to call passed instance method foo or bar? */
return predicate;
}
}
在someMethod() 中创建了SomeType 的两个谓词。
如果SomeType 有 20 个方法,我们可能需要编写 20 个类似的谓词。
我想知道 Java 8 是否可以使用 getGenericPredicate 之类的方法避免代码重复,该方法可以将 bar() 或 foo() 作为参数并返回正确的谓词。
我们的目标是将someMethod 重构为这样的:
public void someMethodRefactored() {
Predicate<SomeType> firstPredicate = getGenericPredicate(SomeType::bar());
Predicate<SomeType> secondPredicate = getGenericPredicate(SomeType::foo());
//...
}
【问题讨论】:
标签: java generics lambda java-8 predicate