Scala:在扩展类中键入内部案例类的分辨率

时间:2014-05-13 07:02:12

标签: scala traits case-class

我有类似树状结构的东西。 我有一个特征T.和两个类(A和B)扩展T。

A类似于从B创建新实例的根节点,而B本身可以从B创建新实例。

在trait T中,我定义了一个用于保存某些特定值的案例类C以及一个包含C的所有实例的List [C](让我们称之为listC以保持简单)。

每个B都知道它的父母。我想要做的是listC = parent.listC。但是这不起作用,因为listC期望typ List [C]但得到List [parent.C]。

我该如何解决这个问题?

此外,我尝试了一些解决方案,但没有效果/不可能:

  • 我无法在特征之外定义案例类,因为它的值只有在特征中定义的类型。
  • 一个简单的解决方案是放弃类并使用元组代替。但是,我想坚持使用该类来增强可读性。把x.varName称为x._4
  • 真好

1 个答案:

答案 0 :(得分:1)

如果您希望C的不同子类中的T类型为同一类型,则无法在T中将类型定义为路径相关类型。

Tuple2[A.D, A.E]Tuple2[B.D, B.E]不同,这是完全相同的问题。

但是如果一个元组可以工作,那么你应该能够在C的伴随对象中定义T案例类,例如使用元组。

执行此操作的一种方法可能是对嵌套类型的限制,并在C / Tuples

中使用常用的超类型