[英]warning: [unchecked] unchecked cast while using 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());
}
}
MySetInterface.java
public interface MySetInterface<T> {
public int empty();
}
MySet.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
如果您阅读了所提供问题的答案,则将对为何显示警告给出非常详尽的解释,并且还提供了有效的解决方法。
上面的代码具有与上述相同的含义。 如果您注意到了,当您将类型转换转换为未知组件类型的数组时,编译器将在此处向您发出未经检查的强制转换警告。 这意味着强制转换可能会在运行时失败。 例如,如果您在上述方法中具有该代码:
建议的类型安全代码。
public <E> E[] getArray(Class<E> clazz, int size) {
@SuppressWarnings("unchecked")
E[] arr = (E[]) Array.newInstance(clazz, size);
return arr;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.