java - 为什么 Scala 不在这里保留字段注释?
问题描述
我有这个用 Java 编写的注释,因为 Scala 无法使用运行时保留策略定义注释。
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface When {
String event();
}
我有这两个课。一个在 Java 中。
public class TestJavaClass {
@When(event = "something")
public String someField;
}
另一个在 Scala 中。
case class TestScalaClass(@When(event = "something") someField: String)
Java 类在反映时会按预期为我提供注释。这是一个 Scala REPL 会话演示了这一点。
scala> classOf[TestJavaClass].getDeclaredField("someField").getAnnotations
res1: Array[java.lang.annotation.Annotation] = Array(@utils.When(event=something))
然而,Scala 类虽然在这方面看起来应该是相同的,但实际上并非如此。
scala> classOf[TestScalaClass].getDeclaredField("someField").getAnnotations
res2: Array[java.lang.annotation.Annotation] = Array()
为什么 Scala 在这里丢失了注释?
解决方案
这似乎有效:
case class TestScalaClass(@(When @annotation.meta.field)(event = "something") someField: String)
对于工件,元注释指示它在哪里放置注释。
文档建议使用别名:
import annotation.meta._
object Helper {
type Whenfield = When @field
}
import Helper._
case class TestScalaClass(@Whenfield(event = "something") someField: String)
推荐阅读
- vue.js - Axios 调用总是以 then() 回调结束
- javascript - 链接 $http.get AngularJS
- java - 如何在 Sceneform 中实现环境 HDR 光照估计?
- scala - 当 println() 内部有函数调用时,scala println() 中的打印顺序是什么?
- c# - 当文本使用某些其他语言时,PersonPicture 的行为不符合预期
- powershell - 挂载时如何获取 ISO FriendlyName
- r - 替换列名而不输入实际的列名
- javascript - 如何根据javascript中的动态值过滤数组
- uwp - UWP 应用程序不会将文件夹复制到 AppData 文件夹
- c++ - 图像转换器类的设计建议