복붙노트

[SCALA] 스칼라는 일반적인 특성과 개체를 확장

SCALA

스칼라는 일반적인 특성과 개체를 확장

나는 스칼라를 사용하고 있는데 나는 데이터 구조와 같은 몇 가지 방법을 제공하는 특성,와 (싱글) 객체를 확장 할 :

trait Tray[T] {
  val tray = ListBuffer.empty[T]

  def add[T] (t: T) = tray += t
  def get[T]: List[T] = tray.toList
}

그리고 나는, 혼합하는 특성 객체로, 다음과 같이 싶습니다 있습니다 :

object Test with Tray[Int]

그러나 추가 및 GET의 타입 불일치가있다 :

Test.add(1)
// ...

어떻게이 작업을 얻을 것이다 할 수 있습니까? 또는 내 실수는 무엇인가?

해결법

  1. ==============================

    1.문제는 당신이 추가에 T와 특성의 유형 매개 변수를 그림자과 방법을 얻을 수있는 것입니다. 이 문제에 대한 자세한 내용 여기 내 대답을 참조하십시오.

    문제는 당신이 추가에 T와 특성의 유형 매개 변수를 그림자과 방법을 얻을 수있는 것입니다. 이 문제에 대한 자세한 내용 여기 내 대답을 참조하십시오.

    여기에 올바른 코드는 다음과 같습니다

    trait Tray[T] {
      val tray = ListBuffer.empty[T]
    
      def add (t: T) = tray += t      // add[T] --> add
      def get: List[T] = tray.toList  // get[T] --> add
    }
    
    object Test extends Tray[Int]
    

    혼자 여기 작동하지 않는 이유에 대한 설명은 사양의 섹션 5.4을 정의-참조 객체 연장의 사용을합니다.

  2. from https://stackoverflow.com/questions/14023712/scala-extend-object-with-a-generic-trait by cc-by-sa and MIT license