У меня есть эта аннотация, которую я написал на 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();
}
У меня есть эти два класса. Один на Яве.
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 теряет аннотацию здесь?