Scala Language
注釈
サーチ…
構文
- @AnAnnotation def someMethod = {...}
- @AnAnnotationクラスsomeClass {...}
- @AnnotatioWithArgs(annotation_args)def someMethod = {...}
パラメーター
パラメータ | 詳細 |
---|---|
@ | 後続のトークンが注釈であることを示します。 |
SomeAnnotation | アノテーションの名前 |
constructor_args | (オプション)アノテーションに渡される引数。存在しない場合、かっこは不要です。 |
備考
Scala-langは、 標準アノテーションとそのJava同等のリストを提供します。
注釈の使用
このサンプル注釈は、次のメソッドがdeprecated
ことを示します。
@deprecated
def anUnusedLegacyMethod(someArg: Any) = {
...
}
これは、等価的に次のように記述することもできます。
@deprecated def anUnusedLegacyMethod(someArg: Any) = {
...
}
メインのコンストラクタに注釈を付ける
/**
* @param num Numerator
* @param denom Denominator
* @throws ArithmeticException in case `denom` is `0`
*/
class Division @throws[ArithmeticException](/*no annotation parameters*/) protected (num: Int, denom: Int) {
private[this] val wrongValue = num / denom
/** Integer number
* @param num Value */
protected[Division] def this(num: Int) {
this(num, 1)
}
}
object Division {
def apply(num: Int) = new Division(num)
def apply(num: Int, denom: Int) = new Division(num, denom)
}
可視性変更子(この場合はprotected
)は、同じ行のアノテーションの後に来る必要があります。アノテーションがオプションのパラメータを受け入れる場合(この場合、 @throws
はオプションの原因を受け入れます()
、コンストラクタパラメータの前にアノテーションの空のパラメータリストを指定する必要があります。
注:複数の注釈を指定することもできます( 繰り返し注釈 )。
補助ファクトリメソッドのないケースクラス(アノテーションに指定された原因)も同様です。
case class Division @throws[ArithmeticException]("denom is 0") (num: Int, denom: Int) {
private[this] val wrongValue = num / denom
}
独自の注釈を作成する
scala.annotation.StaticAnnotationまたはscala.annotation.ClassfileAnnotationから派生したクラスを作成して、独自のScalaアノテーションを作成できます
package animals
// Create Annotation `Mammal`
class Mammal(indigenous:String) extends scala.annotation.StaticAnnotation
// Annotate class Platypus as a `Mammal`
@Mammal(indigenous = "North America")
class Platypus{}
リフレクションAPIを使用してアノテーションを問い合わせることができます。
scala>import scala.reflect.runtime.{universe ⇒ u}
scala>val platypusType = u.typeOf[Platypus]
platypusType: reflect.runtime.universe.Type = animals.reflection.Platypus
scala>val platypusSymbol = platypusType.typeSymbol.asClass
platypusSymbol: reflect.runtime.universe.ClassSymbol = class Platypus
scala>platypusSymbol.annotations
List[reflect.runtime.universe.Annotation] = List(animals.reflection.Mammal("North America"))
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow