Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法对泛型类型T调用私有方法_Java_Stack - Fatal编程技术网

Java 无法对泛型类型T调用私有方法

Java 无法对泛型类型T调用私有方法,java,stack,Java,Stack,我想为修复后计算器扩展stackArray。如果在数组堆栈中推送的元素数(push方法)超过堆栈长度,expand()方法将使数组堆栈的长度加倍,并将arrayStack中的所有元素复制到stackExtend。我的错误消息是,我无法在push方法中对泛型类型T调用expand方法 private void expand(){ // TODO Implement this method. @SuppressWarnings("unchecked")

我想为修复后计算器扩展stackArray。如果在数组堆栈中推送的元素数(push方法)超过堆栈长度,expand()方法将使数组堆栈的长度加倍,并将arrayStack中的所有元素复制到stackExtend。我的错误消息是,我无法在push方法中对泛型类型T调用expand方法

    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的意图,你可能是对的。:)我和一个朋友通过创建一个临时数组并复制元素解决了这个问题。我还有其他关于处理异常的问题,但我无法发布