匿名对象的Scala语法

时间:2017-06-06 09:02:53

标签: java scala oop anonymous-class

我正在尝试找到与此java代码对应的Scala语法。假设A是一个有一个方法sayHi的类。

根据有效的java语法,

new A().sayHi()可以完全编译。另一方面,当我尝试new A.sayHi()时,它不能在Scala中编译。我们在Scala中使用了什么语法?

1 个答案:

答案 0 :(得分:4)

在Scala中,可以使用以下方法之一:

new A().sayHi()
(new A).sayHi()

如果没有括号,并且以new开头,则A.sayHi将被解释为类型,new A.sayHi()将成为类类型A.sayHi的实例化。如果A.sayHi不是会导致编译错误的类类型。

看看:

scala> class A { def sayHi() = "hi" }; object A { type sayHi = String }
defined class A
defined object A

scala> new A().sayHi()
res0: String = hi

scala> new A.sayHi()  // same as `new String()`
res1: String = ""

scala> (new A).sayHi()
res2: String = hi