作者:落可可lookeke | 来源:互联网 | 2023-02-02 00:22
在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
如何在scala中维护此属性?编译器是否在编译时Nothing
扩展每个其他类?
就像这样,是否有可能将自定义类定义X
为一组类的子类型(比如set s)而不X
从s中的所有类扩展?(例如:Class X
是包中所有类的子类型com.myproject.models
)
请分享你的想法.
1> OlivierBlanv..:
如何在scala中维护此属性?编译器是否使Nothing在编译时扩展每个其他类?
Nothing
没有用实际的类实现,它是编译器的纯工件.该Nothing
类型的实际处理可以Nothing
在编译器内的几个地方被粗俗化为硬编码,例如,isSubType(t1: Type, t2: Type): Boolean
无条件时是真的t1 == Nothing
.
就像这样,是否可以将自定义类X定义为一组类的子类型(比如set s),而不是从s中的所有类扩展X?
没有.