LoginSignup
1
1

More than 5 years have passed since last update.

Scalaのannotationがくっつくところがよくわかんねー

Last updated at Posted at 2017-04-02

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
){
}

でオケ。

つまんないことで悩んじまったぜ。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1