可以在特征上使用'new'关键字吗?

Roy*_*man 0 scala

例如: implicit val IntOrd = new Ord [Int ] {...}

如果Ord是特质,此代码是否合法?我在有关OO类和类型类之间差异的文档中看到了这一点。

Sum*_*uma 5

是。您可以在REPL中轻松进行测试:

scala> trait Ord
defined trait Ord

scala> val x = new Ord {}
x: Ord = $anon$1@32a933c3
Run Code Online (Sandbox Code Playgroud)

这是可能的,因为使用new Ord {}您不是在创建特征的实例,而是在特征的匿名子类的实例。(链接的说明适用于Java,但在Scala中的作用相同)。

  • 可能值得一提的是,如果特征*确实具有抽象成员,则必须实现它们。 (3认同)