警告:[unchecked]在使用Generic Array时取消选中

问题描述 投票:0回答:1

我正在创建自己的set类。但是一开始,我会发出警告。我在这个链接中使用How to create a generic array?。但我已经发出警告了。

这是我的警告信息:

MySet.java:11: warning: [unchecked] unchecked cast
        data = (T[]) new Object[10];
                     ^
  required: T[]
  found:    Object[]
  where T is a type-variable:
    T extends Object declared in class MySet
1 warning

这是我的初学者代码:

main.Java

public class Main{

    public static void main(String[] args){

        MySet<Integer> a = new MySet<Integer>();

        System.out.printf("empty or not = %d\n",a.empty());

    }

}

my set interface.Java

public interface MySetInterface<T> {
    public int empty();
}

my set.Java

public class MySet<T> implements MySetInterface<T>{

private T[] data;
private int used;
private int capacity;

public MySet(){

    used = 0;
    capacity = 1024;
    data = (T[]) new Object[10];
}

public int empty(){

    if(used == 0){
        return 1;
    }
    else{
        return 0;
    }

}

如果我使用

@SuppressWarnings("unchecked")
        data = (T[]) new Object[10];

我现在收到此错误消息:

MySet.java:12: error: <identifier> expected
        data = (T[]) new Object[10];
            ^
1 error
java arrays generics
1个回答
1
投票

如果您阅读了所提问题的答案,则会对如何显示警告提供非常详尽的解释,并且还提供了有效的解决方法。

上述代码具有与上述相同的含义。如果您注意到,编译器会在那里为您提供未经检查的强制转换警告,因为您要对未知组件类型的数组进行类型转换。这意味着,强制转换可能会在运行时失败。例如,如果您在上述方法中有该代码:

建议的类型安全代码。

public <E> E[] getArray(Class<E> clazz, int size) {
    @SuppressWarnings("unchecked")
    E[] arr = (E[]) Array.newInstance(clazz, size);

    return arr;
}

Explanation is provided in the answer

© www.soinside.com 2019 - 2024. All rights reserved.