Scala:为什么修复类型成员会创建Java子类?
发布时间:2020-12-16 09:57:57 所属栏目:安全 来源:网络整理
导读:每当上课 class X { type T} 在修复类型成员时实例化一个新的Java类: scala new X() { type T = Int }.getClass.hashCoderes5: Int = 2033908791scala new X() { type T = Int }.getClass.hashCoderes6: Int = 1820034148 然而,当使用工厂时 object X { def
每当上课
class X { type T } 在修复类型成员时实例化一个新的Java类: scala> new X() { type T = Int }.getClass.hashCode res5: Int = 2033908791 scala> new X() { type T = Int }.getClass.hashCode res6: Int = 1820034148 然而,当使用工厂时 object X { def apply[TP] = new X { type T = TP } } 然后单个Java类能够表示所有可能的实例: scala> X.apply[Int].getClass.hashCode res7: Int = 45806309 scala> X.apply[String].getClass.hashCode res8: Int = 45806309 是否有理由存在这种行为,或者Scala编译器是否缺乏单个类就足够的合理优化? 似乎这种行为是具有类型成员的类和具有类型参数的类(类Y [T])之间的另一个区别: scala> class Y[T] defined class Y scala> new Y[Int].getClass.hashCode res9: Int = 1364679843 scala> new Y[String].getClass.hashCode res10: Int = 1364679843 解决方法
表单new Something(someArgs){/ *其他defs,无论是否覆盖* /}的每个表达式都定义了一个静态不同的类型,即使它们在结构上是等价的.
另一方面,多次评估任何单个此类表达式会实例化同一个匿名类. 它与抽象类型成员的存在无关. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读