2015-03-31 5 views
3

я получил следующее сообщение об ошибке в Scala РЕПЛ:Как исправить ошибку несоответствия типа в Scala?

scala> trait Foo[T] { def foo[T]:T } 
defined trait Foo 

scala> object FooInt extends Foo[Int] { def foo[Int] = 0 } 
<console>:8: error: type mismatch; 
found : scala.Int(0) 
required: Int 
    object FooInt extends Foo[Int] { def foo[Int] = 0 } 
               ^

Мне интересно, что это точно означает, и как это исправить.

ответ

9

Возможно, вам не нужен этот параметр типа по методу foo. Проблема в том, что он затеняет параметр типа его черты Foo, но это не то же самое.

object FooInt extends Foo[Int] { 
    def foo[Int] = 0 
      //^This is a type parameter named Int, not Int the class. 
} 

Аналогично,

trait Foo[T] { def foo[T]: T } 
     ^not the ^
       same T 

Вы должны просто удалить его:

trait Foo[T] { def foo: T } 
object FooInt extends Foo[Int] { def foo = 0 } 
+0

Спасибо. Оно работает! – Michael

+0

О, да. Просто забыл это сделать. Сожалею. – Michael

Смежные вопросы