2017-06-06 30 views
2

在scala中Nothing是每个其他类型的子类型。Scala:在用户定义的类中不输入任何内容

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作为一组类的子类(比如设置小号)未做X从所有类的小号延长? (例如:X类是包com.myproject.models中的所有类别的子类型)

请分享您的想法。

+2

见https://softwareengineering.stackexchange.com/questions/195793/how-is-nothing-a-subtype-of-every-other-type-in​​-scala –

回答

6

该属性是如何维护在scala中的?在编译时,编译器是否使任何其他类都不会扩展?

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

像这样,是否可以定义一个自定义类X作为一组类的子类型(比如说set s),而不用让X从s中的所有类延伸?

+0

@OlivierBlanvillain感谢你的回答。 –

相关问题