Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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
为引用类型传递null时出现Scala 2.7.x类型不匹配错误_Scala_Compiler Errors - Fatal编程技术网

为引用类型传递null时出现Scala 2.7.x类型不匹配错误

为引用类型传递null时出现Scala 2.7.x类型不匹配错误,scala,compiler-errors,Scala,Compiler Errors,以下Scala代码未能在Scala 2.7.7中编译,最后一行出现类型不匹配错误“found:Null(Null)required:T”: /** * @param [T] key type */ class Key[T] class Entry[T](val k: Key[T], val v: T) def makeEntry[T <: AnyRef] = new Entry[T](new Key[T], null) /** *@param[T]键类型 */ 类键[T] 类条

以下Scala代码未能在Scala 2.7.7中编译,最后一行出现类型不匹配错误“found:Null(Null)required:T”:

/**
 * @param [T] key type
 */
class Key[T] 

class Entry[T](val k: Key[T], val v: T)

def makeEntry[T <: AnyRef] = new Entry[T](new Key[T], null)
/**
*@param[T]键类型
*/
类键[T]
类条目[T](值k:键[T],值v:T)
def makeEntry[T您尝试过这个吗

def makeEntry[T <: AnyRef] = new Entry[T](new Key[T], null: T)

def makeEntry[T以下是涵盖
null
的定义:

类型Null是所有引用类型的子类型;其唯一实例是Null引用。由于Null不是值类型的子类型,Null不是任何此类类型的成员。例如,无法将Null分配给Int类型的变量

在英语中,这表示不能将
null
赋值给值类型,但可以将其赋值给任何引用类型

我在确定
T
是值类型还是引用类型时遇到了一些困难;但这可以回答您的问题

当您将
T
定义为
AnyRef
的一个子类型时,我想这是一个ref,而“bug”的解释似乎更可能出现;特别是Mitch Blevins刚刚说代码在2.8下工作。

试试这个:

class Key[T <: AnyRef]

class Entry[T <: AnyRef](val k: Key[T], val v: T)

def makeEntry[T <: AnyRef] = new Entry[T](new Key[T], null.asInstanceOf[T])
class Key[T显然,在2.7中实现这一点的方法是:

class Key[T]

class Entry[T](val k: Key[T], val v: T)

def makeEntry[T >: Null] = new Entry(new Key[T], null)

使用REPL和scala 2.7.5时也会出现同样的问题。我没有意识到这是有效的语法。:)只是尝试了一下,它也不起作用。我手头没有2.7可供测试,但我也会尝试null。asInstanceOf[t]在scala中不起作用(实际上我无论如何也不能使用该技术,因为键和条目实际上是在另一个库中定义的Java类)这似乎是共识,这应该是工作,所以我会接受你的答案,除非相反的证据出现。