2017-03-01 82 views
0

我想有一个类型的,我可以用这样的:你可以创建一个包含属性的类型绑定吗?

class Something[T](...) { 

} 

其中T是具有类型用户的属性的类。我想这会很难,因为我需要知道产权的名称?

这可能吗?

更新

我试过此基础上@ pamu的回答

http://scastie.org/28397

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) { 
+1

这'类UserWorker [UserMessage](的亚型...'创建一个名为UserMessage的类型参数,该类型参数会影响具有相同名称的类的存在。只需使用'class UserWorker(...'并编译。 – jwvh

回答

1

是的,你需要知道财产的名称

的一种方式是通过使用包含用户字段和具有约束的超类型的T是所述性状持有用户字段

case class User(name: String) 

trait UserHolder { 
    def user: User 
} 

class Something[T <: UserHolder](value: T) { 
    def foo = value.user 
} 
+0

以示例的形式查看我的更新答案,但仍然出现错误,谢谢! – Blankman

相关问题