Locked History Actions

Diff for "scala/annotations"

Differences between revisions 1 and 2
Deletions are marked like this. Additions are marked like this.
Line 12: Line 12:

== サンプル ==

{{{
package testing;
import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface SomeAnno {
  String something();
}
}}}

{{{
@SomeAnno(something="/foo/bar")
class AnnoTest {
}

class NoTest {
}

object Annotations {

  def main(args: Array[String]) {
    val someAnno = classOf[AnnoTest].getAnnotation(classOf[SomeAnno])
    println(someAnno.something)
    val noAnno = classOf[NoTest].getAnnotation(classOf[SomeAnno])
    println(noAnno)
  }
}
}}}

実行結果
{{{
/foo/bar
null
}}}

アノテーション

参考

Javaに劣るScalaの機能

  • 実行時に参照可能なアノテーションはScalaでは定義できない
    それらはJavaコードで定義してScalaで利用するようにする。

  • 実行時に参照不可能なアノテーションは定義できる?
    しかし、そのようなものは大して意味が無い。

サンプル

package testing;
import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface SomeAnno {
  String something();
}

@SomeAnno(something="/foo/bar")
class AnnoTest {  
}

class NoTest {
}

object Annotations {

  def main(args: Array[String]) {    
    val someAnno = classOf[AnnoTest].getAnnotation(classOf[SomeAnno])
    println(someAnno.something)    
    val noAnno = classOf[NoTest].getAnnotation(classOf[SomeAnno])
    println(noAnno)
  }
}

実行結果

/foo/bar
null