在Scala中注释构造函数参数

pon*_*zao 25 annotations scala

编译为字节码时,注释构造函数参数似乎无效.我也没有编译器警告.

以下作品.getAnnotations为了name现场返回javax.annotation.Nullable.

class Person {
    @Nullable var name: String = _;
}
Run Code Online (Sandbox Code Playgroud)

以下不适用于valvar.

class Person(@Nullable var name: String)
Run Code Online (Sandbox Code Playgroud)

这可能不是故意的,所以我有什么遗漏或者我应该提交错误报告吗?

Mor*_*itz 35

在构造函数参数上指定注释时,需要指定应注释的内容.

要做到这一点注解你的注释与一个或多个注释scala.annotation.target,例如getter,setter或在您的情况field:

import annotation.target.field

class Person(@(Nullable @field) var name: String)
Run Code Online (Sandbox Code Playgroud)

您还可以使用类型别名:

type NullableField = Nullable @field

class Person(@NullableField var name: String)
Run Code Online (Sandbox Code Playgroud)

更新Scala 2.12

现在这个特定的注释和其他包都在scala.annotation.meta包而不是scala.annotation.target中

import scala.annotation.meta.{field, param}
Run Code Online (Sandbox Code Playgroud)

  • 相应的文档现在位于http://www.scala-lang.org/api/current/#scala.annotation.meta.package (2认同)