У меня есть такой код:
case class FunctionCommand[A](function: Function1[Array[A], Unit])
class MyClass(commands: List[FunctionCommand[_]]) {
def foo(parametersForEachFunction: Seq[Array[_]]) {
assert(commands.size == parametersForEachFunction.size)
for ((command, parameter) <- commands zip parametersForEachFunction) {
command.function(parameter)
}
}
}
и не компилируется:
MyClass.scala:7: type mismatch;
found : Array[(some other)_0(in value $anonfun)] where type (some other)_0(in value $anonfun)
required: Array[_0(in value $anonfun)] where type _0(in value $anonfun)
command.function(parameter)
^
Интересно, что такое Array[(some other)_0(in value $anonfun)]
. Могу ли я написать что-то вроде command.function(parameter.asInstanceOf[????])
чтобы компилировать?
У меня есть обходной путь. Я заменяю command.function(parameter)
на:
def forceInvoke[A](command: FunctionCommand[A], parameter: Any) {
command.function(parameter.asInstanceOf[A])
}
forceInvoke(command, parameter)
И он компилируется.
Но я все еще хочу знать, есть ли способ привести parameter
к правильному типу во время выполнения встроенным образом.