我正在创建自己的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());
}
}
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
答案 0 :(得分:1)
如果您阅读了所提问题的答案,则会对警告显示的原因给出非常详尽的解释,并提供有效的解决方法。
上述代码具有与上述相同的含义。如果您注意到,编译器会在那里为您提供未经检查的强制转换警告,因为您要转换为未知组件类型的数组。这意味着,强制转换可能会在运行时失败。例如,如果您在上述方法中有该代码:
建议的类型安全代码。
public <E> E[] getArray(Class<E> clazz, int size) {
@SuppressWarnings("unchecked")
E[] arr = (E[]) Array.newInstance(clazz, size);
return arr;
}