2017-06-06 77 views
2

我试图找到对应于此Java代码的Scala语法。假设A是一个类a有一个方法sayHi。匿名对象的Scala语法

new A().sayHi()将根据有效的java语法完美编译。另一方面,当我尝试new A.sayHi()它不在Scala中编译。我们在Scala中有什么语法呢?

回答

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