УчитываяКак динамически привязать ссылку метода к признаку?
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
не обязательно должна быть чертой, она может быть абстрактным классом с единственным абстрактным методом.
Не могли бы вы высказать какой-то код того, что вы хотели бы написать? – ale64bit
Ммм ..... тогда я думаю, что тебе нужна магия. – ale64bit
Это нормально сказать, что это невозможно в Скале. – Pyrolistical