Java 无法对泛型类型T调用私有方法
我想为修复后计算器扩展stackArray。如果在数组堆栈中推送的元素数(push方法)超过堆栈长度,expand()方法将使数组堆栈的长度加倍,并将arrayStack中的所有元素复制到stackExtend。我的错误消息是,我无法在push方法中对泛型类型T调用expand方法Java 无法对泛型类型T调用私有方法,java,stack,Java,Stack,我想为修复后计算器扩展stackArray。如果在数组堆栈中推送的元素数(push方法)超过堆栈长度,expand()方法将使数组堆栈的长度加倍,并将arrayStack中的所有元素复制到stackExtend。我的错误消息是,我无法在push方法中对泛型类型T调用expand方法 private void expand(){ // TODO Implement this method. @SuppressWarnings("unchecked")
private void expand(){
// TODO Implement this method.
@SuppressWarnings("unchecked")
T[] stackExtend = (T[])new Object[stackArray.length*2];
for (int i = 0; i < INITIAL_LENGTH; i++) {
stackExtend[i] = stackArray[i];
}
stackArray = stackExtend;
}
@Override
public void push(T elem){
if (top == stackArray.length) {
stackArray.expand();
stackArray[top] = elem;
top++;
}
else {
stackArray[top] = elem;
top++;
}
}
}
private void expand(){
//TODO实现此方法。
@抑制警告(“未选中”)
T[]stackExtend=(T[])新对象[stackArray.length*2];
对于(int i=0;i
我将重构push
方法,如下所示
@Override
public void push(T elem){
if (top == stackArray.length) {
expand();
}
stackArray[top] = elem;
top++;
}
这就是消除一些重复的代码
但更重要的是,expand
是要对当前对象调用的方法,而不是数组类型的方法。因此,调用T[]
数组时引用它是一个错误
只需编写
expand()
即可调用当前对象上的方法。我们看不到您的行号。您的代码没有意义。数组没有expand()
方法。我认为@shmosel的意思是“你有一个拼写错误-stackArray.expand();
应该是expand();
”。换句话说,在当前对象上调用expand
方法,而不是在其T[]
字段上。@DawoodibnKareem我说的是真的。但关于OP的意图,你可能是对的。:)我和一个朋友通过创建一个临时数组并复制元素解决了这个问题。我还有其他关于处理异常的问题,但我无法发布