英文:
javac complaining about unchecked cast
问题
我是一名JavaScript开发者,正在进行Java练习,需要帮助。
当我尝试使用javac进行编译时,出现以下错误:
"uses unchecked or unsafe operations."
我需要担心这个吗?
我做得对吗?
MacBook-Pro-3:Documents garrettsmith$ javac codepoop/*.java -Xlint:unchecked
codepoop/GArrayList.java:30: 警告: [unchecked] 未经检查的转换
return (T) elements[i];
^
需要: T
找到: Object
其中 T 是类型变量:
T extends Object 在类 GArrayList 中声明
1 个警告
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 对这一行发出警告。
}
}
英文:
I'm a JavaScript developer doing a Java exercise and I could use help.
When I try to compile with javac, I get:
"uses unchecked or unsafe operations."
Do I need to worry about that?
Am I doing this right?
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.
}
}
答案1
得分: 1
你声明了一个泛型类,但你没有使用泛型类型 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() 方法不会起作用。这只是为了展示如何通过自己的方式确保类型安全性。
英文:
You declared a generic class but you are not using the generic type T to store data. Because you are using an array you actually can't. In this case you can just suppress the warning provided that you class ensures only objects of type T are going to be added.
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;
}
}
Note the add() method receives only T and the array is private so it can't be accessed from outside the class. But, yeah, the add() method won't work. It's just for showing how you can ensure the type safety by yourself.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论