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

在Scala中有一种方法可以从Case类的实例中引用Companion对象吗?

发布时间:2020-12-16 18:31:11 所属栏目:安全 来源:网络整理
导读:在我的具体情况下,我有一个(不断增长的)具有基本特征的案例类库(TKModel) 然后我有一个抽象类(TKModelFactory [T:TKModel]),它由所有伴随对象扩展. 所以我的伴侣对象本身都知道他们需要提供的“答案”的类型(‘T’)以及他们通常“接受”常用实现方法的对象
在我的具体情况下,我有一个(不断增长的)具有基本特征的案例类库(TKModel)

然后我有一个抽象类(TKModelFactory [T<:TKModel]),它由所有伴随对象扩展. 所以我的伴侣对象本身都知道他们需要提供的“答案”的类型(‘T’)以及他们通常“接受”常用实现方法的对象类型. (如果我变得懒惰,剪切并粘贴代码块来搜索并销毁这个节省我的培根!)我确实在互联网上看到警告但是任何形式的CompanionObject.method(caseClassInstance:CaseClass)都充满了“代码味道“然而.不确定他们是否真的适用于Scala?

但是,似乎没有任何方法可以在抽象案例类(TKModel)中声明任何可以引用(在运行时)案例类的特定实例的正确伴随对象的任何内容.这导致我必须编写(和编辑)一些我希望在每个案例类中标准化的方法调用.

case class Track(id:Long,name:String,statusID:Long)扩展TKModel

object Track扩展TKModelFactory [Track]

我如何在TKModel中写一些内容,以便新的Track(1,“x”,1).someMethod()实际上可以调用Track.objectMethod()

是的我可以写val CO = MyCompanionObject以及隐式val CO:???在TKModel抽象类中,使所有调用挂起该值.试图找到使编译器为此感到高兴的任何咒语,但似乎是不可能的任务.因为我不能声明我不能在抽象类中的任何占位符方法中引用它.

是否有一种更优雅的方式来简单地获取对案例类伴随对象的引用?

我的具体问题,如前所述(但似乎尚未回答),是否有办法处理伴随对象和case类的继承,并找到引用,以便我可以编写常见的方法调用抽象类?

还是有一个完全不同的更好的模型?

解决方法

伴随对象无权访问实例,但是没有理由使用case类调用伴随对象的方法.

case class Data(value: Int) {
  def add(data: Data) = Data.add(this,data)
}

object Data {
  def add(d1: Data,d2: Data): Data =  Data(d1.value + d2.value)
}

(编辑:李大同)

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

    推荐文章
      热点阅读