2011-04-24 7 views
16

저는 casein 클래스와 함께 mixin으로 특성을 사용하려고합니다.Mixin 형질이있는 스칼라 케이스 클래스

case class Team(name:String) 

trait WinStreak{} 

내가 그렇게처럼 사용하고 싶습니다 :

val team = Team("name") with WinStreak 

분명히 내가이 작업을 수행 할 수 없습니다. 대/소문자 클래스가 동반자 객체를 사용하여 클래스의 인스턴스를 생성하기 때문에 이것이 발생합니까? 다른 솔루션은 클래스 정의에서 특성을 확장하는 것이지만 스타일을 혼합 할 수 있는지를 알고 싶습니다.

답변

26

실제로 은 Team.apply("name")에 대한 메소드 호출이므로 apply 메소드 내부에서 객체를 만듭니다.

case class Team(name:String) 
trait WinStreak{} 

val x = new Team("name") with WinStreak 
+1

좋은 점 :

트릭을 할해야 new 키워드를 사용하여 객체를 생성합니다. 방금 사례 클래스를 사용할 때 private 생성자를 사용할 수없고 생성자에 대한 액세스를 허용하지 않는다는 것을 깨달았습니다. 지적 해 주셔서 감사합니다. –

관련 문제