为什么我会从 -Xlint 收到这 4 条警告,我应该怎么做?我刚刚开始使用 Java,所以可能遗漏了一些明显的东西。
import java.util.*;
class CompareGerbils implements Comparator {
public int compare(Object o1, Object o2) {
return ((Gerbil)o2).number() - ((Gerbil)o1).number();
}
}
class Gerbil {
int gerbilNumber;
Gerbil(int gN) {
gerbilNumber = gN;
}
int number() {
return gerbilNumber;
}
}
public class lt {
public static void main(String[] args) {
// I'd like to be able to add both ints and strings to list
ArrayList list = new ArrayList();
//unchecked call warning:
list.add(1);
//unchecked call warning:
list.add("b");
ArrayList<Gerbil> gerbillist = new ArrayList<Gerbil>();
for(int i = 0; i < 5; i++) {
gerbillist.add(new Gerbil(i));
}
//unchecked conversion warning
//unchecked method invocation
Collections.sort(gerbillist, new CompareGerbils());
}
}
编辑:到目前为止的回复已经回答了 Arraylist 声明。代码底部的排序警告怎么样?谢谢
最佳答案
你得到这个是因为你没有为 ArrayList list
定义数据类型.在 list
中同时添加字符串和整数的唯一方法没有收到警告是通过将其定义为 ArrayList<Object> list
- 这就是这里隐式发生的事情(行 list.add(1);
隐式地将 1
转换为 new Integer(1)
- 这称为自动装箱)。另请注意,如果您想在 lists
中同时拥有字符串和整数,排序方法并没有真正意义 - 你期望事物如何排序,按字母顺序还是数字?
编辑:此外,声明具体类型(即 ArrayList<Object> list
)也不是好的做法,除非您有充分的理由这样做。建议您使用接口(interface)初始化,即 List<Object> list
.
因此,您的代码必须像这样(请注意 Comparator<Gerbil>
部分修复了 Collections.sort
中的警告):
// I'd like to be able to add both ints and strings to list
List<Object> list = new ArrayList<Object>();
list.add(new Integer(1));
list.add(new String("b"));
List<Gerbil> gerbillist = new ArrayList<Gerbil>();
for(int i = 0; i < 5; i++) {
gerbillist.add(new Gerbil(i));
}
Collections.sort(gerbillist, new Comparator<Gerbil>() {
public int compare(Gerbil o1, Gerbil o2) {
int diff = o1.getNumber() - o2.getNumber();
if (diff > 0)
return 1;
else if (diff <0)
return -1;
else
return 0;
}
});
关于 Gerbil 类,我建议您使用 getNumber
的形式作为方法名称而不是 number
- 这是方法名称的事实标准,用于检索成员变量的值(以及分别用于设置它的 setNumber(int value)
):
class Gerbil {
int gerbilNumber;
Gerbil(int gN) {
gerbilNumber = gN;
}
int getNumber() {
return gerbilNumber;
}
}
关于java - Arraylist 的未检查警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5142906/