【发布时间】:2014-08-13 19:32:43
【问题描述】:
我有一个包含混合 Java-Scala 代码的 Lift 项目。该项目有一个使用 EclipseLink 用 Java 编写的 JPA 后端,由使用 Lift 和 Lift-NG 的 Scala 端访问。
在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[B <: Binding[_ <: IEntity]](serviceName: String, dataAccessObject: IDAO[_ <: IEntity]) {
def persist(binding : B): Unit = {
val entity = binding.unbind
dataAccessObject.persist(entity)
}
}
这个层次结构的目的是让我创建服务实例来处理实体 E 的给定绑定,它还可以接收和使用为处理类型 E 而创建的适当 DAO。例如:
// Java side
class Todo implements IEntity
class TodoManager implements IDAO<Todo>
// Scala side
case class TodoBinding extends Binding[Todo] {
override def unbind: Todo = new Todo()
}
object HelloWorld extends BasicService[TodoBinding]("todoService", new TodoManager)
我的问题是BasicService的persist方法内部发生的编译错误。在最后一行,我明白了:
Type mismatch: expected _$1, actual: IEntity
由于我对 Scala 有点缺乏经验,我可能会遗漏类型系统中非常明显的一些东西,但我真的无法弄清楚这一点。如何解决此错误?
【问题讨论】: