5

来自 ScalaTest 文档:

class ExampleSpec extends FlatSpec {

def fixture =
new {
  val builder = new StringBuilder("ScalaTest is ")
  val buffer = new ListBuffer[String]
}

...

我不明白这里如何使用 new 关键字。夹具显然是一个函数,它声明并返回......什么?它似乎是一个对象,因为它具有可以使用 . 符号。

这里创建的是一个匿名类,它是 AnyRef 的子类吗?

4

1 回答 1

13

是的,它返回任意类的实例。在 REPL 会话中自己检查并不难:

scala> def fixture = new { val string = "mr. String" }
fixture: Object{val string: String}

Java 可以做同样的事情,不管你信不信。以下是有效的 Java

(new Object() {   
  public void sayHello() {
    System.out.println("hello!");   
  }   
}).sayHello(); 

Java 版本只是一种稍微冗长的语法,并且具有类型系统限制,使其几乎无用。更多信息在这里http://james-iry.blogspot.com/2009/04/java-has-type-in​​ference-and-refinement.html

于 2013-05-29T15:51:18.280 回答