Scala:使用用户定义的类输入Nothing

时间:2017-06-06 12:27:37

标签: scala nothing

在scala Nothing中是每种其他类型的子类型。

scala> class A {}
defined class A

scala> def x[T >: Nothing](t: T): Unit = {}
x: [T](t: T)Unit

scala> x(new A)

当我们创建一个任意类时,它会自动成为Nothing

的超类型
  1. 如何在scala中维护此属性?编译器是否使Nothing在编译时扩展每个其他类?
  2. 就像这样,是否可以将自定义类X定义为一组类的子类型(比如set s ),而无需从所有类扩展X s 中的课程? (例如:类X是包com.myproject.models
  3. 中所有类的子类型

    请分享您的想法。

1 个答案:

答案 0 :(得分:6)

  

如何在scala中维护此属性?编译器是否在编译时使Nothing扩展每个其他类?

Nothing没有用实际的类实现,它是编译器的纯工件。 Nothing类型的实际处理可以在编译器内的几个地方被粗俗化为硬编码Nothing,例如,isSubType(t1: Type, t2: Type): Booleant1 == Nothing无条件地为真。

  

就像这样,是否可以将自定义类X定义为一组类的子类型(比如set s),而不是从s中的所有类扩展X?

没有