我正在尝试在Scala中使用自定义注释.在这个例子中,我创建了一个我想用元数据注释的字符串(在本例中是另一个字符串).然后,给定一个数据的实例,我想读取注释.
scala> case class named(name: String) extends scala.annotation.StaticAnnotation
defined class named
scala> @named("Greeting") val v = "Hello"
v: String = Hello
scala> def valueToName(x: String): String = ???
valueToName: (x: String)String
scala> valueToName(v) // returns "Greeting"
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
Scala 中有不同类型的注释:
您可以使用 Java Reflection API 访问的 Java 注释、源代码中的注释、跨不同编译单元的类型检查器可用的静态注释(因此它们应该位于类文件中的某个位置,而不是正常反射所在的位置) )和类文件注释,它们像 java 注释一样存储,但无法使用 java 反射 api 读取。
我在这里描述了如何访问静态和类文件注释:What is the (current) state of scala Reflection features,尤其是wrt注释,截至版本2.11?
如果您只需要一个包含字符串的注释,使用由 JVM 加载的 Java 注释可能是更简单的选择。