我有一个打印参数T类型的函数。用foo
调用它时,它打印Int
。用bar
调用时,它会打印Nothing
。当编译器清楚地知道Nothing
必须是T
时,为什么要打印Int
,因为我们要返回printType()
的结果和{的返回类型{1}}必须是bar
吗?
代码可以编译并运行,但是类型打印不正确。
Int
答案 0 :(得分:0)
也许你是说
def printType[T](input: String)(implicit tag: TypeTag[T]): T = ...
代替
def printType[T](input: String)(implicit tag: TypeTag[T]): Option[T] = ...
如果您有方法
def myMethod(a: A): B = ???
然后使用它
val a: A1 = ???
val b: B1 = myMethod(a)
然后,A1 = A
,B1 = B
不一定是A1 <: A
,B1 >: B
。
所以
def bar: Int = {
printType("something")
}
printType
返回Nothing
的可能性。
当编译器无法推断出某种类型T
时,知道了L <: T <: U
便得出T = L
的结论。现在是Nothing
。