Java 为什么Scala不在这里保留字段注释?
我用Java编写了这个注释,因为Scala无法使用运行时保留策略定义注释Java 为什么Scala不在这里保留字段注释?,java,scala,annotations,Java,Scala,Annotations,我用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(RetentionPoli
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;
}
另一个在斯卡拉
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)