oop – 子类型类型的优点
发布时间:2020-12-16 09:43:07 所属栏目:安全 来源:网络整理
导读:OOP子类型超类型的优点有哪些?换句话说,现在我们有类型,是否有理由仍然使用OOP子类型? PS:我是Scala程序员 解决方法 目前,Scala类型类的句法开销比通过特性继承进行子类型化还要好一点,潜在的运行时开销也是如此。想象一下,您需要有五十种不同类型的
OOP子类型超类型的优点有哪些?换句话说,现在我们有类型,是否有理由仍然使用OOP子类型?
PS:我是Scala程序员 解决方法
目前,Scala类型类的句法开销比通过特性继承进行子类型化还要好一点,潜在的运行时开销也是如此。想象一下,您需要有五十种不同类型的事件符合接口来支持事件处理引擎。写得更容易
class MyEvent extends Event{ val name = "foo" } 比 class MyEvent{ val name = "foo" } object MyEvent2Event{ implicit def convert(myEvent:MyEvent) = new Event{ val name = myEvent.name} } 第二种形式允许在后续多态性,命名自由和一般不良声明方面有更多的灵活性,但是打印出这五十种转换方法,然后在需要类型类时进行适当的导入,一个正确的痛苦如果您不需要灵活性,很难看到收益。另外还有第二个这样的“新”关键字,这将产生无穷无尽的“这是过度的垃圾收集器”参数。 对于引入可变状态的mixin继承而言,情况更糟。考虑以下特征,取自生产代码: trait Locking{ private val lock = new ReentrantReadWriteLock() def withReadLock[T](body: => T):T={ try{ lock.readLock.lock() body }finally{ lock.readLock.unlock() } } // same for withWriteLock } 令人难以置信地使用mixin继承,并且由于存在“锁定”val,并不能真正用于Scala类型类。应该去哪里如果你把它放在适应的类中,那么你将损失大部分trait的封装值。如果将其放在适配器代码中,则锁不再保护任何内容,因为每次修改锁定对象时都会锁定不同的锁定对象。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |