假设我们上了这门课:
public class MyClass {
final int value = 0;
public int getValue() {
return value;
}
}是否可以以某种方式获取getValue()方法的输出并对其进行增量,或者通过使用引用运算符而不是lambda对其进行任何计算?
我想要实现的是这样的东西,但是与引用运算符
Function<MyClass, Integer> getVal = x -> x.getValue() + 1;如果我写这样的东西,我会得到一个错误:
Function<MyClass, Integer> getVal = MyClass::getValue + 1;发布于 2022-03-29 12:25:22
不,那是不可能的。
方法引用是一个表达式,它有一个值。值的类型是在编译时计算的,这取决于使用它的上下文(这称为多表达式)。方法引用始终是函数接口的实例。
在您的示例中,MyClass::getValue返回一些兼容的接口,但是表达式MyClass::getValue + 1导致+操作符必须处理该接口。
在JLS§15.13.3中,您可以阅读有关方法引用的内容。
发布于 2022-03-29 12:15:00
我不知道这就是lamba表达式的问题所在,但是您总是可以包装表达式并使用对这些包装器的引用。
stream.map(this::doIt)
public int doIt(MyClass x){
return x.getValue()+1;
}https://stackoverflow.com/questions/71661264
复制相似问题