Scalaで使えるAnnotationって、2種類ある訳で
JavaのAnnotationとScalaネイティブのAnnotationが。
Javaは無視してScala全力ならネイティブで問題ないけど、Javaの資産なら仕方ない。
ってんで、
@Retention(RetentionPolicy.RUNTIME)
public @interface SomeAnnotation {
int value() default 0;
}
こんなのがあったとして、
class SomeClass(
@BeanProperty @SomeAnnotation(1) var someValue:Int
){
}
こんな風にすると……。
@SomeAnnotationはどこにくっつくんだ?
コンテナのパラメータ? varのgetter/setter? @BeanPropertyのgetter/setter?
コンストラクタのパラメータにアノテーションがくっつく模様
気持ちとしては、varで追加される
def someValue():Int = { .... }
のところについてて欲しい。
というときは、
import scala.annotation.meta._
class SomeClass(
@(SomeAnnotation @getter)(1) var someValue:Int
){
}
と、Annotationに@getterというAnnotationをつける。
scala.annotation.meta以下にはgetter,setterの他に、beanGetterとか、見れば想像がつくのが転がっている。
AnnotationにAnnotationをつけてるから、
@(SomeAnnotation @getter)
ここがAnnotationの本体で、引数はこれの後につける……と。
毎度、@getterとかつけなきゃいかんのか?
package object xxxx {
import scala.annotation.meta._
type SomeAnn = SomeAnnotation @getter @setter
}
こんなことして、
class SomeClass(
@SomeAnn(1) var someValue:Int
){
}
でオケ。
つまんないことで悩んじまったぜ。