为什么可以在类型字段中混合类?
发布时间:2020-12-16 08:55:02 所属栏目:安全 来源:网络整理
导读:为什么我可以说类型字段的类型与另一个类混合在一起(当只有特征可以在类中混合时)? 例: scala class Adefined class Ascala class B extends Adefined class B 不允许将B混合到A: scala new A with Bconsole:10: error: class B needs to be a trait to b
为什么我可以说类型字段的类型与另一个类混合在一起(当只有特征可以在类中混合时)?
例: scala> class A defined class A scala> class B extends A defined class B 不允许将B混合到A: scala> new A with B <console>:10: error: class B needs to be a trait to be mixed in new A with B ^ 但这是可能的: scala> class E {type T = A with B} defined class E scala> new E res1: E = E@1f2bc83 解决方法
mixin实例化和复合类型定义之间存在差异.
首先,带有B的A类型存在并且正好是B类,唉,它在scala中完全合法 val x: A with B = new B 原样 val y: Any with AnyRef with A with B = new B 因为它描述了完全相同的类型. 此外,你必须记住,Scala不一定需要有人居住的类型 – 即底层类型根本没有任何东西可以实例化. def foo: AnyRef with AnyVal = sys.error("IMPOSSIBRU!") 根据定义AnyRef的AnyRef没有任何子类型,因此声明类型检查. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |