给定
def add(x: Int, y: Int): Int = x + y
val addAsMethodReference: (Int, Int) => Int = add _
trait BinaryOperator {
def execute(x: Int, y: Int): Int
}
val addAsBinaryOperator: BinaryOperator = addAsMethodReference...?
如何addAsMethodReference
在不手动BinaryOperator
实施BinaryOperator
的情况下绑定?
Java 8 SAM 可以正常工作。我可以在 Java 8 中使用二元运算符特征的任何地方使用方法引用。
理想情况下,我想写如下内容:
var addAsBinaryOperator: BinaryOperator = addAsMethodReference.asNewInstanceOf[BinaryOperator]
我想要这种asNewInstanceOf
方法的原因是它适用于任何方法签名。我不在乎传递了多少参数。如果我必须手动实现这一点,我必须仔细匹配每个x
和y
. 这在更大范围内容易出错。
如果一方有多个抽象方法,则规范left.asNewInstanceOf[right]
将在编译时失败。right
如果left
侧不是与侧中的单个抽象方法签名匹配的功能类型right
,它将在编译时失败。right
侧面不需要是特征,它可以是具有单个抽象方法的抽象类。