我有两个特质
trait AppModel {}
trait ModelOperations {
def get(model: AppModel): Option[AppModel]
def create(model: AppModel): Boolean
}
并实施了课程
class User extends AppModel {
val id = "xyz"
val name = "abc"
}
class UserOperations extends ModelOperations {
override def get(user: User) : Option[User] = {
// get a new user object by filtering existing parameters
return None
}
override def create(user: User): Boolean = {
// do something
return false
}
}
但是当我尝试编译时,我会收到method get overrides nothing
和method create overrides nothing
错误
我打算做的是:声明一个接口I
,其接口可以接受扩展T
并返回AppModel
的任何类T
的参数。
任何扩展I
的类都可以使用完全接受类T
作为参数的方法(而不是R
的任何其他类AppModel
)
我该怎么做?
答案 0 :(得分:3)
试试这个
trait AppModel {}
trait ModelOperations {
def get[T<:AppModel](model: T): Option[T]
def create[T<:AppModel](model: T): Boolean
}
class User extends AppModel {
val id = "xyz"
val name = "abc"
}
class UserOperations extends ModelOperations {
override def get[User](user: User) : Option[User] = {
// get a new user object by filtering existing parameters
return None
}
override def create[User](user: User): Boolean = {
// do something
return false
}
}
答案 1 :(得分:2)
您可以使用带有边界的type
字段,您可以在具体实现中进行优化。这是一个例子
trait AppModel
trait ModelOperations {
type T <: AppModel
def get(model: T): Option[T]
}
class User extends AppModel
class UserOperations extends ModelOperations {
type T = User
def get(user: User): Option[User] = None
}