java - Arraylist 的未检查警告

标签 java warnings

为什么我会从 -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/

相关文章:

r - 此警告来自 : Warning: `recursive` is deprecated, 的位置,请改用 `recurse`

javascript - js 警告 : Resource interpreted as Script but transferred with MIME type text/plain

c++ - G++ 警告 : extra tokens at end of#include directive [enabled by default]

java - request.getRequestDispatcher().forward(request, response) 在新页面

java - 设置和显示名称和电子邮件 Java 对象类

java - 如何通过重写接口(interface)实现Fragment-Activity通信?

java - 如何在一行中将数​​组连接到字符串(Java)?

java - 在Java线程应用程序中获取不正确的输出? [复制]

最后一个元素的 LISP 汽车?

python - 如何将 Statsmodels 警告变成异常