首页 > 解决方案 > 泛型数据类型创建是未经检查或不安全的操作

问题描述

我试图用泛型创建一个新的数据类型,但 javac 编译器一直告诉我

"Note: MyStack.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
, when I try to recompile it with the option -Xlint, 
"MyStack.java:8: warning: [unchecked] unchecked cast
        data = (T[]) new Object[5];
                 ^
  required: T[]
  found:    Object[]
  where T is a type-variable:
    T extends Object declared in class MyStack
1 warning

. 我应该怎么做才能避免这个警告?

public class MyStack<T> {

    int index;
    private T[] data;

    public MyStack() {
        index = 0;
        data = (T[]) new Object[5];
    }

    public void push(T input) {
        data[index++] = input;
    }

    public T pop() {
        return data[--index];
    }

}

标签: javagenerics

解决方案


我认为没有办法避免警告。在这个问题,我们可以看到使用 Array.newInstance(class, size) 的解决方案。但是我们应该添加注解'@SuppressWarnings("unchecked")'来处理它。

此外,如果您不做编程练习或做框架/库。我建议您使用 java.collection 数据结构。

我希望我帮助了你


推荐阅读