wildcatsの日記

赤羽在住でIT関係の会社の社長やってます。

Generics

型パラメータなT[]な戻り値を返すメソッドがあるとして


return result.toArray(new T[result.size()]);
これはできないから

protected abstract Class getReturnClass();
・・・・
return result.toArray((T[]) Array.newInstance(this.getReturnClass(),result.size()));
とかにしないといけないんだよなぁ。。。。
Array.newInstanceの第一引数を

T.getClass()
とかすると怒られちゃうし。List要素の1インスタンスをgetClass()するコードも微妙だしな。
Listな戻り値なら返せるのに。
またこれは無関係だけどArray.newInstanceの戻り値がObject[]なのも微妙だなぁと思ってみたりする。


型パラメータをインスタンス化できないんだよなぁ。。。。
何とかできないものか。


なんか釈然としないけどListの戻り値のメソッドにして、こうするしかないのかな

return Collections.unmodifiableList(result);