2012-02-16 15 views
1

ジェネリックスを使用してユニバーサルスタックを作成したい。JavaジェネリックスNullPointerException

public class UniversalStack<E> implements StackInterface<E> { 

    private E[] stack; 
    private int dim; 
    private int index; 

    @SuppressWarnings("unused") 
    public UniversalStack(int dim) 
    { 
     this.dim=dim; 
     this.index=0; 
     @SuppressWarnings("unchecked") 
     E[] stack = (E[]) new Object[dim]; 


    } 

    @Override 
    public void push(E el) { 
     // TODO Auto-generated method stub 
     if(index+1<dim) 
     { 
      stack[index] = el; 
      index=index+1; 
     } 

    } 
} 

すべてがうまくコンパイルされます。

UniversalStack<Integer> integerStack = new UniversalStack<>(10); 
integerStack.push(new Integer(1)); 

私はあなたが私が間違っているのものを私に説明してもらえ

Exception in thread "main" java.lang.NullPointerException 
    at com.java.lab4.UniversalStack.push(UniversalStack.java:41) 
    at com.java.lab4.testStack.main(testStack.java:14) 

を得る:問題は、私は次のように呼び出すときに来ますか?私が愚かな間違いを私に厳しいものにしないと、私は初心者なので、あまり分かりません。

答えて

7

あなたはあなたのコンストラクタ内stackを再宣言するのではなく、外stackに代入している:pushで使用した場合

E[] stack = (E[]) new Object[dim]; 

stack = (E[]) new Object[dim]; 

すべきは、そのためstackはnullです。

+0

あり、それは私がここに掲載した後、私は再びそれを読むまで、それは..私は私がスタックメンバー再宣言実現しませんでした。ありがとう! – Teo

+2

私は日食があなたに警告しようと思ったが、あなたはsuppresswarnings注釈を追加した:-) –

-1

Java用にすでに存在するスタッククラスを使用してください。

Stack<Integer> stack = new Stack<Integer>(); 

詳しいドキュメントは、うん、ここhttp://docs.oracle.com/javase/6/docs/api/java/util/Stack.html

+0

私は混乱している、なぜこれは-1を保証するのだろうか?彼はスタックを使用しようとしていますが、私は彼が既に存在するスタック実装を使用することをお勧めしますか?存在するものを使うのが良いアイデアのように思えますし、あなた自身のものを書くよりも、試して真実です。 – dsingleton

関連する問題