Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 新建一个scala类,另一个类为param meet“;“类型不匹配”;错误_Class_Scala - Fatal编程技术网

Class 新建一个scala类,另一个类为param meet“;“类型不匹配”;错误

Class 新建一个scala类,另一个类为param meet“;“类型不匹配”;错误,class,scala,Class,Scala,我有两门课,一门是classbase,另一门是test 类测试有两个参数 在运行代码之后,我得到了这样一个类型不匹配的错误 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,

我有两门课,一门是classbase,另一门是test
测试有两个参数

在运行代码之后,我得到了这样一个类型不匹配的错误

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)

在我的代码中,已经定义了一个类型Stringb,但是在classtest中,b的类型是T在编译时刻classtest中的类型变量T不是String,但是您尝试用String调用它

两种可能的解决办法:

a) 为参数T设置下限

error: type mismatch;
 found   : String("sssssssssss")
 required: T
    b.tell("sssssssssss")
               ^
one error found
b) 或更改prameter的类型b

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

在编译时,类test中的类型变量T不是String,但您尝试用String调用它

两种可能的解决办法:

a) 为参数T设置下限

error: type mismatch;
 found   : String("sssssssssss")
 required: T
    b.tell("sssssssssss")
               ^
one error found
b) 或更改prameter的类型b

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

在您给出的示例中,T是一个字符串,但它不一定是。它可能是任何东西


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

在您给出的示例中,T是字符串,但不一定是字符串。它可能是任何东西


不管怎样,都要将字符串传递给b.tell(),但是b.tell()的参数类型不能保证是字符串。

thx。这真的很有效。我的代码是从twitter的Scala School并发章节中提取的。在本章末尾,有一个制作人/消费者演示。类“类生产者[T](路径:字符串,队列:BlockingQueue[T])val queue=new LinkedBlockingQueue[String](),“queue”是“BlokingQueue[T]”的实例,然后将字符串类型“queue”作为参数传递给生产者。我运行代码。”queue.put(line)'调用类型未匹配错误。所以教程的演示有一个bug?你是对的,它是混凝土制作人
类制作人[T]
中的bug。这真的很有效。我的代码是从twitter的Scala School并发章节中提取的。在本章末尾,有一个制作人/消费者演示。类“类生产者[T](路径:字符串,队列:BlockingQueue[T])val queue=new LinkedBlockingQueue[String](),“queue”是“BlokingQueue[T]”的实例,然后将字符串类型“queue”作为参数传递给生产者。我运行代码。”queue.put(line)'调用类型未匹配错误。所以教程的演示有一个bug?你是对的,它是混凝土制作人
类制作人[T]
中的bug。