2017-03-01 67 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

相關問題