1. ホーム
  2. java

[解決済み】javaの詳細エラーに-Xlint:uncheckedでリコンパイルする。

2022-02-08 21:11:28

質問内容

以下のようなエラーが発生し、デバッグの方法がわからないようです。

注: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;
        }
}

解決方法は?

コンパイルするときは、このようにしてください。

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