无法在通用类型T

时间:2018-07-18 22:19:26

标签: java stack

我想扩展stackArray作为后修复评估程序。如果在数组堆栈中推送的元素数量(推方法)超过了堆栈长度,则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++;
        }

    }
}

1 个答案:

答案 0 :(得分:0)

我将按以下方式重构push方法。

@Override
public void push(T elem){

    if (top == stackArray.length) {
        expand();
    }

    stackArray[top] = elem;
    top++;
}

因此,这消除了一些重复的代码。

但更重要的是,expand是您要在当前对象上调用的方法,而不是数组类型的方法。因此,在调用T[]数组时是错误的。

只需编写expand()即可在当前对象上调用该方法。