6/22(Wed)
/** かなり勘違い */ JavaでListとかのコレクションを配列に変換するロジックって、 ・Collection#toArray() ・Collection#toArray(Object[]) の二つがあるんですが、 前者は特定の型に変換する必要がない(つまりObject[]のまま扱う)場合に使用し、 後者は逆に、特定の型に変換する必要がある場合に遣います。 で、よく後者のメソッドを使っていたのですが、 引数に渡す配列って、Listのサイズ分の配列を確保する必要ないんですね。 かなぁり勘違いしてました(T_T) 引数のObject[]は、型情報を与えるだけで、 結果を格納する参照は、また別にあるそうです。 APIリファレンスにもきっちり書いてありました。 一応検証コード書いたので、載せてみます。 import java.util.ArrayList; import java.util.List; /** * List → 配列に変換するテスト * * (実行結果例) * aaa * 123 * --- * aaa * 123 * --- * aaa * 123 */ public class ListToArray { public static void main(String[] args) { List lst = new ArrayList(); lst.add("aaa"); lst.add("123"); String[] array = null; // (誤り)配列をリストのサイズ分用意 String[] array1 = new String[lst.size()]; array = (String[])lst.toArray(array1); printArray(array); // (正しい)配列は型情報の意味として与える String[] array2 = new String[0]; array = (String[])lst.toArray(array2); printArray(array); // (正しい)上の省略形 array = (String[])lst.toArray(new String[0]); printArray(array); } private static void printArray(String[] array) { System.out.println("---"); for(int i=0; i<array.length; i++) { System.out.println(array[i]); } } } /** これまた勘違い */ Velocityって、「汎用」テンプレートエンジンだったんですね。 すっかりWebにしか使えないのかと思ってました(^^; なんかのソースコードジェネレータとか、 その手のツールに使えるような気がしてきました。