在我的具体情况下,我有一个(不断增长的)具有基本特征的案例类库(TKModel)
然后我有一个抽象的class(TKModelFactory[T <: TKModel]),它由所有伴随对象扩展.
所以我的伴侣对象本身都知道他们需要提供的"答案"的类型('T')以及他们通常"接受"常用实现方法的对象类型.(如果我变得懒惰,剪切并粘贴代码块来搜索并销毁这个节省了我的培根!)我确实在互联网上看到了警告,但是任何形式CompanionObject.method(caseClassInstance: CaseClass)都充斥着"代码味".不确定他们是否真的适用于Scala?
但是,似乎没有任何方法可以在抽象case class(TKModel)中声明任何可以引用(在运行时)case类的特定实例的正确伴随对象的东西.这导致我必须编写(和编辑)一些我希望在每个案例类中标准化的方法调用.
case class Track(id: Long, name: String, statusID: Long) extends TKModel
object Track extends TKModelFactory[Track]
如何将我写的东西在TKModel这样new Track(1, "x", 1).someMethod()实际上可以调用Track.objectMethod()
是的,我可以在抽象类中编写val CO = MyCompanionObject类似 implicit val CO: ???的内容TKModel,并使所有调用都挂起该值.试图找到使编译器为此感到高兴的任何咒语,但似乎是不可能的任务.因为我不能声明我不能在抽象类中的任何占位符方法中引用它.
是否有一种更优雅的方式来简单地获取对案例类伴随对象的引用?
我的具体问题,如前所述(但似乎尚未回答),是否有办法处理伴随对象和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)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1816 次 |
| 最近记录: |