当我未明确指定类型时,为什么TypeTag为T Nothing?

时间:2018-10-04 22:42:12

标签: scala generics

我有一个打印参数T类型的函数。用foo调用它时,它打印Int。用bar调用时,它会打印Nothing。当编译器清楚地知道Nothing必须是T时,为什么要打印Int,因为我们要返回printType()的结果和{的返回类型{1}}必须是bar吗?

代码可以编译并运行,但是类型打印不正确。

Int

1 个答案:

答案 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 = AB1 = B不一定是A1 <: AB1 >: B

所以

def bar: Int = {
  printType("something") 
}

printType返回Nothing的可能性。

当编译器无法推断出某种类型T时,知道了L <: T <: U便得出T = L的结论。现在是Nothing