为什么我从-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());
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:迄今为止的回复已经回答了Arraylist声明.代码底部的排序警告怎么样?谢谢
你得到这个是因为你还没有定义数据类型ArrayList list.在list没有收到警告的情况下添加字符串和整数的唯一方法是将其定义为ArrayList<Object> list- 这是隐式发生的(行list.add(1);隐式转换1为new Integer(1)- 这称为自动装箱).还要注意,如果你想要同时使用字符串和整数lists,那么排序方法并没有真正意义 - 你是如何期望事物按字母或数字排序的?
编辑:此外,ArrayList<Object> list除非您有充分的理由,否则声明具体类型(即)并不是一种好习惯.建议您使用接口初始化,即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;
}
});
Run Code Online (Sandbox Code Playgroud)
关于Gerbil类,我建议你使用表单getNumber作为方法名称而不是number- 它是方法名称的事实标准,用于检索成员变量的值(以及分别setNumber(int value)用于设置它):
class Gerbil {
int gerbilNumber;
Gerbil(int gN) {
gerbilNumber = gN;
}
int getNumber() {
return gerbilNumber;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9956 次 |
| 最近记录: |