来自ScalaTest文档:
class ExampleSpec extends FlatSpec {
def fixture =
new {
val builder = new StringBuilder("ScalaTest is ")
val buffer = new ListBuffer[String]
}
...
我不明白这里是如何使用新关键字的。夹具显然是一个功能,它声明并返回......什么?它似乎是一个对象,因为它具有可以访问的成员(构建器和缓冲区)。符号。
这里创建的是一个匿名类,它是AnyRef的子类吗?
答案 0 :(得分: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-inference-and-refinement.html