Scala与Java的集成:从基础到高级应用
1. Scala类与单例对象在Java中的表现
当存在一个名为 App
的Scala类时,Scala会创建一个对应的Java App
类来存放所定义的 App
类的成员。此时,它不会为同名的单例对象添加任何转发方法,Java代码需要通过 MODULE$
字段来访问单例对象。
2. 特质作为接口
编译任何特质都会创建一个同名的Java接口。这个接口可作为Java类型使用,能通过该类型的变量调用Scala对象上的方法。不过,在Java中实现特质通常不太可行,但有一种特殊情况很重要:如果创建一个只包含抽象方法的Scala特质,那么该特质会直接转换为Java接口,无需担心其他代码。这意味着可以用Scala语法编写Java接口。
3. 注解
3.1 标准注解的额外效果
部分注解在针对Java平台时会让编译器发出额外信息。编译器遇到这类注解时,会先按Scala通用规则处理,然后为Java做额外处理。具体如下:
| 注解类型 | 效果 |
| ---- | ---- |
| @deprecated
| 编译器会在生成的代码中添加Java自身的弃用注解,这样Java编译器在Java代码访问弃用的Scala方法时会发出弃用警告。 |
| @volatile
| Scala中标记为 @volatile
的字段,在生成的代码中会被赋予Jav