【发布时间】:2016-06-09 08:00:30
【问题描述】:
在 Scala 中,是否有可能在 final 中拥有一个 trait 来将其混入其中的类?
如果这个类混合了一个特征,我需要防止从一个类继承,但我不确定这是否可能。也许我需要一个宏。
或者一个技巧,比如在 trait 中定义一个 final 成员以避免将该 trait 混合两次,但这不是我需要实现的。
例子:
trait MyTrait
class A extends MyTrait
class B extends A
def myFun[T <: MyTrait](t: T)
这个函数不仅需要T来实现/混合MyTrait,而且假设它包含如果T是一个基类并且实际上作为t是一个子类传入的逻辑不起作用的T。例如myFun[A](new B)。
显然这是一个极端情况,但也许有一种方法可以确保/指定作为参数传递的t 必须完全是T 类型,而不是它的一个子类型。我不知道这是否可能,这将是最好的解决方案。
我能找到的最接近的方法是确保 T 是最终的,最好的方法是在 MyTrait 中写一些东西来强制执行它。
所以我的问题。
另外,我如何确保T 是一个案例类?
【问题讨论】:
-
我认为这不可能。您能否详细说明您想要实现的目标?
-
您可能会发现 Miles Sabin 的这个要点很有趣:gist.github.com/milessabin/ace99b2feaa6e4e8822cda08d79cb91e