2016-07-09 1 views
0

Stack of ItemTypesから、ItemTypeクラスのメソッドにアクセスする際に問題があります。私のエラーが隠れている場所ですStack内のItemTypeメソッドへのアクセス

public String toString(){ 
     return stack[top].getName(); } 

マイitemTypeにクラスには、私のStackクラスから

public class SteveItemType{ 

    private String name; 


    public SteveItemType(String name){ 
    this.name = name; 
    } 
     public String getName(){ 
    return this.name; 
    } 

    } 

私のtoStringメソッドは非常に簡単です。

私のアプリケーションで最後に
public ArrayStack(){ 
     stack = (SteveItemType[]) new Object[default_cap]; } 

    public ArrayStack(int n){ 
     stack = (SteveItemType[]) new Object[n]; } 

、どのように私これがある:私は

マイ有界スタックのコンストラクタがある

(私のgetNameメソッドにアクセスするから私を無効にされた)オブジェクト型ではありません私のスタック内部に格納されていただきました!信じています

ArrayStack stack = new ArrayStack<SteveItemType>(n); 

stack.push(new SteveItemType("Steve")); 

私のエラーが

> ArrayStack.java:59: error: cannot find symbol 
>   return stack[top].getName(); 
01:私のスタックを作成し、私のitemTypeに&をプッシュしています

誰かが私の論理/思考が間違っている理由を説明できれば、私は非常に感謝します。私ができる限り正確にしようとするすべての動いている部分について私の謝罪します。

(私は私のgetNameメソッドにアクセスすることができません)

+2

大量の関連コードを除外しました。 'stack'はどこで宣言されていますか? 'トップ'とは何ですか? – shmosel

+0

'(SteveItemType [])new Object [default_cap]'は 'ClassCastException'をスローする必要があります。 – shmosel

+0

'ArrayStack.java'を投稿してください。 –

答えて

1

あなたはArrayStack.javaに該当するようなコードのスニペットを以下してもらえ:

public class ArrayStack<T extends SteveItemType> { 

private SteveItemType[] stack; 
private int top;  
private int default_cap=5; 

public ArrayStack(){ 
     stack = new SteveItemType[default_cap]; 
    } 

public ArrayStack(int size) { 
    this.stack = new SteveItemType[size]; 
    } 

public String toString(){ 
     return stack[top].getName(); 
    } 

public void push(T t){ 
    // push an object 
    } 
    // more methods follows 
} 

説明:

上記のクラスを使用して定義されます有界型パラメータ。型パラメータの名前はTです。それにはキーワードextendsが続いています。これには再び上限が続きます。これはここにはSteveItemTypeです。

public class ArrayStack<T extends SteveItemType> { } 

これはTタイプSteveItemTypeの少なくともあることを保証します。 Tは、SteveItemTypeのサブタイプである場合もあります。 ArrayStackの中ののように扱い、SteveItemTypeのように扱うことができ、SteveItemTypeに属するすべての方法を使うことができます。したがって、タイプキャスティングなしで次のように定義することができます:

public String toString(){ 
     return stack[top].getName(); 
    } 
+0

作品!ありがとうございました!あなたは時間があれば、なぜ説明してください! – Qbert

+1

私の答えの '説明'セクションをご覧ください。 –

関連する問題