黑猴子的家:Scala 针对 Java 的注解

Scala 类库提供了一组用于与Java互操作的注解。我们将在下面介绍这些注解

1、Java修饰符

Java修饰符:对于那些不是很常用的Java特性,Scala使用注解而不是修饰符关键字。

 // JVM中将成为volatile的字段
@volatile var done = false 
// 在JVM中将成为transient字段,该字段不会被序列化。
@transient var recentLookups = new HashMap[String, String]  
@strictfp def calculate(x: Double) = ...
@native def win32RegKeys(root: Int, path: String): Array[String]

2、标记接口

标记接口:Scala用注解@cloneable和@remote 而不是 Cloneable和Java.rmi.Remote“标记接口”来标记可被克隆的对象和远程的对象

@cloneable class Employee

3、受检异常

受检异常:和Scala不同,Java编译器会跟踪受检异常。如果你从Java代码中调用Scala的方法,其签名应包含那些可能被抛出的受检异常。用@throws注解来生成正确的签名。

class Book {
@throws (classOf[IOException]) def read(filename: String) { ... }
...
}
Java版本的方法签名:
void read(String fileName) throws IOException
// 如果没有@throws注解,Java代码将不能捕获该异常
try {//Java代码
book.read("war-and-peace.txt");
} catch (IOException ex) {
...
}

即:Java编译期需要在编译时就知道read方法可以抛IOException异常,否则Java会拒绝捕获该异常。

Scala
class A{
  def play() = {
    throw  new IOExcetion()
  }
}

Java
class B{
  public static void main(String[] args){
     A.play()
  }
}

在Scala中抛出异常,在Java中调用这个方法,因为是Scala语法,Java检测不到抛出了异常,所以需要添加异常注解

转载于:https://www.jianshu.com/p/0ce7b51f50a6

猜你喜欢

转载自blog.csdn.net/weixin_33859504/article/details/91182517