[Scala]アノテーションを使う
Javaコードとpackage objectを組み合わせるのが良い?
sbt使っているならJavaソースコード含んでいてもコンパイル問題無いので、割りと簡単
ただ、Javaコードをsrc/main/javaの下に置くか、src/main/scalaに混ぜるかはライブラリごとに種類がある感じ?
SquerylなんかはScalaコードと同じところにある
https://github.com/max-l/Squeryl/blob/master/src/main/scala/org/squeryl/annotations/Transient.java
Ignore.java
package my.library.annotations; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface Ignore { }
コンストラクタにアノテーション付けたときに判別するために@fieldを付ける必要がある
http://stackoverflow.com/questions/3769624/annotating-constructor-parameters-in-scala
なので、package object を使って簡略化するといい
package.scala
package my.library import scala.annotation.target.field import my.library.annotations._ package object annotations { type ignore = Ignore @field }
package my.library import my.library.annotations._ case class User( name: String, @ignore age: Int ) { @ignore val test = "" }
チェックするときは
classOf[User].getDeclaredFields .map(_.getAnnotation(classOf[Ignore]))
とかやるとわかる。