2011-09-05 18 views
5

これは通常の配列だった場合、新しい配列を作成してからarraycopyを実行するだけで、ジェネリックスではできません。私がこれまでに作ってみた最高のものがある:配列のサイズ変更

public void resize() { 
    T[] tempArray = Arrays.copyOf(myArray,myArray.length*3); 
} 

それはコンパイルしますが、実行時に、私は、nullポインタ例外を取得します。誰も私が間違っていることを説明することはできますか?

+2

「java.util.ArrayList」の理由は何ですか?それは、これ以上のことをすべて処理し、ホイールを再発明する必要はありません。 – corsiKa

+0

配列のサイズを変更する場合は、おそらく汎用ArrayListが必要です。 – Cheeso

+0

私はArrayとArrayListsに精通していますが、私はジェネリックスについて学んでいます。提案していただきありがとうございます(実際には、ArrayListはおそらく私が使用するものです)。 – MatthewK

答えて

6

あなたは

私の推測では、myArray[0]がnullであるので、myArray[0].getClass()は、コンポーネントの実行時の型が必要な場合はmyArray.getClass().getComponentType()

0

つを使用することができますnullポインタ

を投げることですコピーを作成するArrays.copyOf(myArray,myArray.length*3)を使用することができますもの:

  1. nullポイントを取得している場合rの最初の行にresize()があります。myArray[0]に値がない可能性があります。それがヌルなら、あなたのgetClass()は爆弾になるでしょう。

  2. myArray = tempArrayを割り当てるようには思われませんので、間もなくArrayIndexOutOfBoundsをすぐに実行してください。

+0

それは、手作業で配列にいくつかのものを追加しようとしましたが、それはそれを修正したので、問題は他の場所にあります。 #2の良いキャッチ、申し訳ありません私は質問にそれを貼り付けることを忘れていた。 – MatthewK

関連する問題