Я работаю над проектом Lift со смешанным кодом Scala и Java.
На стороне Java у меня есть следующие релевантные элементы:
interface IEntity
interface IDAO<T extends IEntity> {
void persist(T t);
}
На стороне Scala у меня есть следующее:
abstract class Binding[T <: IEntity] extends NgModel {
def unbind: T
}
class BasicService[E <: IEntity](serviceName: String, dataAccessObject: IDAO[E]) {
def render = renderIfNotAlreadyDefined(
angular.module("myapp.services")
.factory(serviceName,
jsObjFactory()
.jsonCall("persist", (binding: Binding[E]) => { //<---COMPILATION ERROR
try {
dataAccessObject.persist(binding.unbind)
Empty
} catch {
case e: Exception => Failure(e.getMessage)
}
})
)
)
}
Этот код не будет компилироваться. Я получаю следующую ошибку в указанной выше точке:
No Manifest available for Binding[E].
Мне не совсем понятно, почему это происходит, но я предполагаю, что это связано с тем, что это вызов вложенного метода. Код компилируется отлично, если я объявляю функцию-член с Binding [E] в качестве параметра, например:
def someFunction(binding: Binding[E] = { // same code as above }
Почему это происходит, и как я могу обойти это?