我想要一个我可以这样使用的类型:
class Something[T](...) {
}
其中T是具有User类型属性的类。我想这很难,因为我需要知道该物业的名称对吗?
这可能吗?
更新
我根据@ pamu的回答尝试了这个
trait GenericMessage {
def user: User
}
sealed trait UserMessage extends GenericMessage
case class LoginMessage(id: Int, user: User) extends UserMessage
case class User(id: Int)
class UserWorker[UserMessage](name: String) extends Worker[UserMessage](name) {
}
class Worker[T <: GenericMessage](name: String) {
val tasks = scala.collection.mutable.Queue.empty[T]
}
我收到错误:
type arguments [UserMessage] do not conform to class Worker's type parameter bounds [T <: GenericMessage]
[error] class UserWorker[UserMessage](name: String) extends Worker[UserMessage](name) {
答案 0 :(得分:1)
是的,你需要知道属性的名称
一种方法是使用包含用户字段并具有约束的超类型,T是特征持有用户字段的子类型
case class User(name: String)
trait UserHolder {
def user: User
}
class Something[T <: UserHolder](value: T) {
def foo = value.user
}