倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

プラグインを作ろう! (11) -- パラメータ値の型:multiple value

前回に続き、今回は「多重値 (multiple value)」*1のパラメータを見ていきましょう。 「多重値」とは、配列やコレクション・フレームワーク内の型などのことです。

使用できる「多重値」の型


具体的な「多重値」の型には以下のようなものがあります:

  • 配列
  • java.util.Collection のサブタイプ(java.util.List, java.util.Set など)
  • java.util.Map
  • java.util.Properties

値の設定方法はそれぞれの型によって異なります。 また、java.util.Collection, java.util.Map については Generics での型指定はできません*2。 以降でそれぞれの型を見ていきましょう。

配列


配列型のパラメータの宣言は以下の通り:

/** @parameter */
private String[] myArray;

パラメータ値の指定は「単一値」の場合と同じように、<configuration> 要素下に以下の要素を加えます:

<myArray>
  <param>メネラウスの定理</param>
  <param>チェバの定理</param>
  <param>トレミーの定理</param>
</myArray>

「myArray」はパラメータの名前、「param」は任意の文字列です。

後で出てくる java.util.Collection と異なり、配列では要素の型が普通に(「単一値」の場合と同じように)指定できるので便利です。 例えば、java.lang.Integer 型の配列を使用したい場合は以下のようにします:

/** @parameter */
private Integer[] myArray;
<myArray>
  <param>1</param>
  <param>2</param>
</myArray>

java.util.Collection のサブタイプ


java.util.Collection のサブタイプである java.util.List や java.util.Set(java.util.Collection も)型のパラメータも使用することができます。 パラメータの宣言は以下の通り:

/** @parameter */
private List myList;

java.util.Collection のパラメータ値の指定も配列の場合と同じです:

<myList>
  <param>方冪の定理</param>
  <param>円周角の定理</param>
  <param>中線定理</param>
  <param>接弦定理</param>
</myList>

java.lang.Collection 型のパラメータでは基本的に java.lang.String 型が使われ、パラメータの宣言時に型を指定できません*3(そのうち Generics に対応すればできるようになるかもしれませんが)。 ただし、以下のようにパラメータ値の指定をする際に型も一緒に指定すると、配列の場合と同じように、変換された型のオブジェクトが設定されます:

<myList>
  <java.lang.Integer>1</java.lang.Integer>
  <java.lang.Integer>2</java.lang.Integer>
</myList>

java.util.Map


java.util.Collection 型の他に、java.util.Map 型のパラメータも使用できます:

/** @parameter */
private Map myMap;

パラメータ値の設定には、キーを要素名に、値をその子テキストにして指定します:

<myMap>
  <H>水素</H>
  <O>酸素</O>
  <C>炭素</C>
</myMap>

java.lang.Map 型のパラメータでは、キーも値も java.lang.String 型が使用されます。

java.util.Properties


java.util.Properties 型のパラメータも使用できます:

/** @parameter */
private Properties props;

パラメータ値の設定は java.util.Collection の場合と少々異なり、<property> 要素下に <name> 要素と <value> 要素を書きます:

<props>
  <property>
    <name>H2O</name>
    <value></value>
  </property>
  <property>
    <name>CO2</name>
    <value>二酸化炭素</value>
  </property>
</props>

キーの文字列に要素名にできないようなもの(例えば空白が入っているなど)を使用する場合はこちらを使うと良いでしょう。

*1:「多重値」は拙者の適当な訳デス。

*2:Maven2 のバージョンは 2.0.7。

*3:Maven2 のドキュメントには「XML」に実装のヒントが含まれているなら、それが使われる (If the XML contains an implementaion hint, that is used.) と書かれているんですが、どうやってやるのやら・・・やり方はこちら