问题描述
我是从事Java练习的JavaScript开发人员,可以寻求帮助。
当我尝试使用javac进行编译时,我得到:
"uses unchecked or unsafe operations."
我需要为此担心吗?
我这样做正确吗?
MacBook-Pro-3:Documents garrettsmith$ javac codepoop/*.java -Xlint:unchecked
codepoop/GArrayList.java:30: warning: [unchecked] unchecked cast
return (T) elements[i];
^
required: T
found: Object
where T is a type-variable:
T extends Object declared in class GArrayList
1 warning
GArrayList:
import java.util.Arrays;
public class GArrayList<T> {
private Object elements[];
private int size = 0;
public GArrayList() {
elements = new Object[1];
}
public T get(int i) {
return (T) elements[0]; // javac complains about this line.
}
}
解决方法
您声明了一个通用类,但是没有使用通用类型T存储数据。因为您使用的是数组,所以实际上不可以。在这种情况下,只要您确保类将仅添加类型T的对象,就可以取消警告。
public class GArrayList<T> {
private Object elements[];
private int size = 0;
public GArrayList() {
elements = new Object[1];
}
@SuppressWarnings("unchecked")
public T get(int i) {
return (T) elements[0]; // javac complains about this line.
}
public void add(T element) {
elements[index++] = element;
}
}
请注意,add()方法仅接收T,并且该数组是私有的,因此无法从类外部进行访问。但是,是的,add()方法不起作用。只是为了说明如何自己确保类型安全。