Genesiでは、Genesis内で生成されたインスタンスを他のメソッドの引数に使用することができます。
インスタンスを生成する際に、instanceタグのname属性を与えておくことで、後にそのインスタンスを参照します。
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<sample1>
<!--
サンプル1.1
Listオブジェクトに各種オブジェクトをaddする。
-->
<class name="java.util.ArrayList">
<instance name="list1">
<method name="add(Object)">
<param type="Byte" value="1" />
</method>
<method name="add(Object)">
<param type="Short" value = "2" />
</method>
<method name="add(Object)">
<param type="Float" value="3" />
</method>
<method name="add(Object)">
<param type="Double" value="0.1111111" />
</method>
<method name="add(Object)">
<param type="Character" value="a" />
</method>
<method name="add(Object)">
<param type="Integer" value="4" />
</method>
<method name="add(Object)">
<param type="Long" value="11111111111" />
</method>
<method name="add(Object)">
<param type="Boolean" value="true" />
</method>
<method name="add(Object)">
<param type="Boolean" value="false" />
</method>
</instance>
</class>
<!--
サンプル1.2
サンプル1.1で作成したListオブジェクトをHashMapに追加する。
-->
<class name="java.util.HashMap">
<instance name="map1">
<method name="put(Object, Object)">
<param type="String" value="samplelist" />
<param type="java.util.List" value="list1" />
</method>
</instance>
</class>
</sample1>
</config>
この例では生成済みのArrayListインスタンス(name=list1)を、後に、HashMapのインスタンスメソッド
「put(Object, Object)」の第二引数に使用しています。
Genesisでは生成済みのインスタンスをメソッドの引数に与える際のインスタンス名の表記方法が二種類あります。
上記の例では、ArrayListとそれを使用するHashMapの両クラスが同じ<sample1> 〜 </sample1>ノードの配下に定義されているため、単にインスタンス名を指定するだけで良いですが、もし別のノードで宣言されたインスタンスを参照したい場合は、/config/sample1/list1 のようにトップノードからフルパスで指定する必要があります。
下記がその例です。
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<sample1>
<!--
サンプル1.1
Listオブジェクトに各種オブジェクトをaddする。
-->
<class name="java.util.ArrayList">
<instance name="list1">
<method name="add(Object)">
<param type="Byte" value="1" />
</method>
<method name="add(Object)">
<param type="Short" value = "2" />
</method>
<method name="add(Object)">
<param type="Float" value="3" />
</method>
<method name="add(Object)">
<param type="Double" value="0.1111111" />
</method>
<method name="add(Object)">
<param type="Character" value="a" />
</method>
<method name="add(Object)">
<param type="Integer" value="4" />
</method>
<method name="add(Object)">
<param type="Long" value="11111111111" />
</method>
<method name="add(Object)">
<param type="Boolean" value="true" />
</method>
<method name="add(Object)">
<param type="Boolean" value="false" />
</method>
</instance>
</class>
</sample1>
<!--
サンプル2.1
サンプル1.1で作成したListオブジェクトをHashMapに追加する。
-->
<sample2>
<class name="java.util.HashMap">
<instance name="map1">
<method name="put(Object, Object)">
<param type="String" value="samplelist" />
<param type="java.util.List" value="/config/sample1/list1" />
</method>
</instance>
</class>
</sample2>
</config>
この機能はコンフィグファイルが肥大化した際にインスタンス名の衝突を防ぐために存在します。