我在从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方法)
答案 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();
}