Welcome everyone

remove的错误使用

java 汪明鑫 352浏览 0评论
/**
 * @author wmx
 * @date 2019-11-26
 */
public class TestRemove {
    public static void main(String[] args) {
        Set<Integer> set = new TreeSet<>();
        List<Integer> list = new ArrayList<>();

        for (int i = -3; i < 3 ; i++) {
            set.add(i);
            list.add(i);
        }
        
        System.out.println("set"+set);
        System.out.println("list"+list);

        for (int i = 0; i < 3 ; i++) {
            set.remove(i);
            list.remove(i);
        }

        System.out.println("set"+set);
        System.out.println("list"+list);

    }
}

第一处输出:

set[-3, -2, -1, 0, 1, 2]
list[-3, -2, -1, 0, 1, 2]

下面呢?

应该都输出[-3,-2,-1]

因为remove的是元素0,1,2

 

但是输出的是

set[-3, -2, -1]
list[-2, 0, 2]

 

为什么会出现这种带有歧义的方法呢?

是由于方法重载导致的

 

set的remove是移除集合中该元素
boolean remove(Object o);

 

然而list中有remove的重载方法
boolean remove(Object o);
E remove(int index);

 

add时由于范型是Integer,int会转为包装类Integer,add没问题

remove由于参数是int,会直接调用这个重载方法E remove(int index);

重载方法的误用,往往使你得不到你想得到的答案

 

建议一:

尽量不使用重载方法

建议二:

重载方法要有详细的注释和文档

转载请注明:汪明鑫的个人博客 » remove的错误使用

喜欢 (0)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz