加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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的封装值。如果将其放在适配器代码中,则锁不再保护任何内容,因为每次修改锁定对象时都会锁定不同的锁定对象。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读