首页 > 解决方案 > 使用 -Xlint 重新编译:未检查 java 中的详细错误

问题描述

我有以下错误,我似乎无法弄清楚如何调试它:

注意:MyStack.java 使用未经检查或不安全的操作。

注意:使用 -Xlint:unchecked 重新编译以获取详细信息。

public class MyStack<T> implements MyStackInterface<T>{
        private T[] s;
        private int size;

    public MyStack() {
        this.s = (T[])new Object[30];
    }
        
    public void push(T x){
            if (size==s.length){
                T[] b = (T[])new Object[size*2];
                int i;
                for (i=0;i<s.length;i++){
                    b[i] = s[i];
                }
                s=b;
            }
            s[size++] = x;
        }
    public T pop(){
            if (size == 0){
                throw new RuntimeException("Stack Underflow");
            }
            return s[--size];
        }
    public T peek(){
            if (size==0) throw new RuntimeException("Stack Underflow");
            return s[size-1];
        }

    public boolean isEmpty(){
            return size==0;
        }
    public int size(){
            return size;
        }
}

标签: java

解决方案


当你编译代码时使用这个:

javac -Xlint:unchecked

然后你会看到:

MyStack.java:6: warning: [unchecked] unchecked cast
    this.s = (T[])new Object[30];
                  ^
  required: T[]
  found:    Object[]
  where T is a type-variable:
     T extends Object declared in class MyStack\

MyStack.java:11: warning: [unchecked] unchecked cast
            T[] b = (T[])new Object[size*2];
                         ^
  required: T[]
  found:    Object[]
  where T is a type-variable:
    T extends Object declared in class MyStack
2 warnings

所以底线,问题是由于泛型类型数组的创建。要解决此问题,请阅读此链接:https ://stackoverflow.com/a/530289/588532


推荐阅读