- PR -

ジェネリック型の配列を生成するには

1
投稿者投稿内容
みけ
会議室デビュー日: 2002/07/25
投稿数: 14
投稿日時: 2005-08-05 11:29
こんにちは

ジェネリッククラスの配列をインスタンス化出来ず悩んでいます。

やりたいことは

class Sample<T>
{
protected Sample<T>[] child = null;
public create_child_array( int size )
{
child = new Sample<T>[size]; // <<== ERROR
}
}
のようなことなんですが
child = new Sample<T>[size]; // <<== ERROR
この行で、
cannnot create generic array と言うエラーが発生してしまいます。

少し調べてみたところ
java.util.ArrayList<E> の内部では
E[] newValue = (E[])new Object[newSize];
のようなことをやっていたので、まねをして

child = (Sample<T>[])new Object[10];
とやったら、今度は実行時に TypeCast Exception が発生してしまいました。

このようなことをやるにはどうすればいいのでしょう?

開発環境は JDK5.0_04 + Eclipse3.1 です。

宜しくお願い致します。
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2005-08-05 12:26
>child = new Sample<T>[size]; // <<== ERROR

言語仕様でできないようになっています。
ArrayList などで代用するのが無難ではないでしょうか。
まーちん
会議室デビュー日: 2001/12/10
投稿数: 5
投稿日時: 2005-08-05 17:15
みかさんがやりたいことは、
コード:
protected Sample<T>[] child = null;
  …
child = new Sample<T>[size];


ではなく、
コード:
protected T[] child = null;
  …
child = new T[size];


ではないですか?
みけ
会議室デビュー日: 2002/07/25
投稿数: 14
投稿日時: 2005-08-05 17:29
ご返信ありがとうございます。

>びしばし様
>ArrayList などで代用するのが無難ではないでしょうか。
たしかに、そうするのが無難だと思うのですが、
ただ、メモリ的にかなりシビアなので、出来るだけその辺削りたいんで^^;

>まーちん様
>child = new T[size];
いえ、

class Sample<T>
{
protected Sample<T>[] child = null;
protected int id = INVALID;
T data = null;

public create_child_array( int size )
{
child = new Sample<T>[size]; // <<== ERROR
}
}
のようなクラスを定義し

これを
Sample<String> strSample = new Sample<String>();
Sample<Integer> intSample = new Sample<Integer>();
等として、インスタンスを生成したいのです。
(Sample<T> 型のツリー構造のようなイメージです)
1

スキルアップ/キャリアアップ(JOB@IT)