前ページ | トップページ | 次ページ

7階:注釈等

注釈

Scalaの注釈(annotation)はJavaのそれとは異なり普通のクラス(ただしAnnotationの子孫であること)であり、ゆえにその(「@」付きな)コンストラクタ呼び出しは実引数を取ることも可能である。Javaのそれの実引数部に相当するものは、Scalaのそれの実引数部とは別に、その後ろに波括弧で囲み置かれ、ゼロ個以上の「val」定義の形を取る(各々は「,」で区切る)。その定義式は、プラットフォーム依存で「定数」でなければならず、少なくとも次のものがプラットフォーム非依存でも(注釈用の)「定数」と見なされる:AnyVal系のリテラル、文字列リテラル、「classOf」によるクラス、定数要素のみから成る配列リテラル。注釈は、トップレベル及びテンプレートにおける定義と宣言の前、引数要素の前、型の後ろ、クラス定義の型引数角括弧の後ろ、式に続く「:」の後ろ、に複数置かれ得る。ClassfileAnnotationの子孫はclassファイル内に保存され、ゆえにトップレベルにのみ可能である。StaticAnnotationの子孫は全コンパイルの過程で型チェッカに可視であり、いずれでも無いものはそれが現われるコンパイル単位の間のみ可視である。


scalaパッケージに含まれる定義済み注釈は以下の通り。


@transient

@volatile

@throws(クラスリテラル):

@native

Javaでのそれらの指定に等しい。なお、throwsはScala側から投げる例外をJava側でキャッチしたい時に指定する。


@serializable

@cloneable

@remote

Javaでのそれらのインターフェースの継承に等しい。


@deprecated

Javaでのその注釈に等しい。


@SerialVersionUID(UID番号):

Javaでの「private final static SerialVersionUID = UID番号」に等しい。なお、UID番号はLongリテラルでなければならない。


@unchecked

match式のmatchの前の式に指定し、パターン指定されていない組み合わせがあり得るという警告をそのmatch式に限りオフにする。


@inline

メソッド定義に指定し、そのメソッドを可能な限りインライン展開させる;インライン展開とは、一般には参照呼び出しとして実装される関数(遅延評価関数も意味論的にはインライン展開に等しいものと見なせるが、コンパイラ実装的にはその定義式が複雑な場合は普通参照呼び出しに変換される)を、その定義式を直接関数呼び出し個所へ埋め込むことで式の一部としてしまう最適化技法の一つである。ただし、現在のたいていのコンパイラはインライン展開すべきものは自動でそうするようになっており、またたいていは明示指定よりもコンパイラの自動判断の方が適切な場合が多いので、これを指定したからといって必ずしもより高速になるとは限らない。


@noinline

メソッド定義に指定し、可能な場合でもインライン展開させないようにする。


また、scala.reflectパッケージにも以下の有用な注釈が定義されている。


@BeanProperty

メンバに指定し、JavaBeans式ゲッタ・セッタ(getまたはsetにそのメンバ名が先頭大文字で続く形)も生成させる。この生成はclassファイル生成時に行なわれ、コンパイルレベルではまだ見えないので、Scala側からはScala本来のゲッタ・セッタ(要するにただのプロパティ名だけ)でアクセスしなければならない。なお、この逆、JavaBeans式ゲッタ・セッタをプロパティ名だけで読み書きできる機能はScalaには無い;素直にJavaBeans式ゲッタ・セッタのフルネーム(getまたはsetにそのメンバ名が先頭大文字で続く形)を使うことになる。


@BeanInfo

クラスに指定し、そのクラスを丸ごとJavaBeans方式でもアクセス可能にする。


@BeanInfoSkip

メンバに指定し、そのJavaBeansなゲッタ・セッタ等は作らせない;@BeanInfoで一部だけ指定を解除するためのものである。


@BeanDescription(記述文字列):

クラスまたはメンバにJavaBeansのgetShortDiscription()で取得可能な機能概要記述を付加する。


@BeanDisplayName(名前文字列):

同上、JavaBeansのgetDisplayName()で取得可能な地域対応表示名を付加する。


(Scalaの文法を主とする概要的解説はこれで終わりである。このページの以降は、さらにScalaを使い込んでみて得られる有益と思える情報をおいおい書き足していく予定である)


前ページ | トップページ | 次ページ