新的scala类与另一个类作为参数遇到“类型不匹配”错误?

时间:2014-05-08 12:22:51

标签: class scala

class base[T] () {
    def tell(t: T) { }
}

class test[T](a: T, b: base[T]){
    b.tell("sssssssssss")
}

val b = new base[String]()
val s:String = "12354555"
val t = new test[String](s, b)

我有两个班,一个是班级基础,另一个班级是考试
测试类有两个参数。

运行代码后,我遇到了类型不匹配错误。

error: type mismatch;
 found   : String("sssssssssss")
 required: T
    b.tell("sssssssssss")
               ^
one error found

在我的代码中,已定义类型字符串 b,但在类测试中,b的类型为 T

2 个答案:

答案 0 :(得分:4)

在编译时,类测试中的类型变量 T 不是字符串,但您尝试使用字符串

两种可能的解决方案:

a)设置参数 T

的下限
class test[T >: String](a: T, b: base[T]){
    b.tell("sssssssssss")
}

b)或更改参数类型 b

class test[T](a: T, b: base[String]){
    b.tell("sssssssssss")
}

答案 1 :(得分:1)

在你给出的例子中,T是一个字符串,但它并不是必须的。它可能是任何东西。

无论如何都将String传递给b.tell(),但b.tell()的参数类型不能保证是String。