在Stack中访问ItemType方法

时间:2016-07-09 00:25:05

标签: java

我在从ItemTypes堆栈中访问ItemType类中的方法时遇到了问题。

我的ItemType类很简单

 public class SteveItemType{

    private String name;


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

  }

我的Stack类中的toString方法:

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

这是我的错误隐藏的地方。我相信存储在我的堆栈中的是不是对象类型(这使我无法访问我的getName方法)

My Bounded Stack构造函数是:

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

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

最后在我的应用程序中,这是我推动我的ItemType&创建我的堆栈:

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

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

我的错误是

> ArrayStack.java:59: error: cannot find symbol
>          return stack[top].getName();

如果有人能解释为什么/我的逻辑/思想错误在哪里我非常感激,对于我尽可能精确地制作的所有动作部分,我表示道歉。

(我无法访问我的getName方法)

1 个答案:

答案 0 :(得分: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开始,我们可以将T视为SteveItemType,并且可以使用属于SteveItemType的所有方法。所以我们可以在没有任何类型转换的情况下定义以下内容:

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