【发布时间】:2015-10-05 10:47:38
【问题描述】:
众所周知,java 缓存从 -128 到 127 的整数。现在,我有一个类容器,如下所示:
public class Container<T>{
private List<T> elements;
public boolean add(T t){
//add the element to the container
//if elements already contains t such that
//there is e from elements so e == t
//the IllegalArgumentException should be thrown
}
}
现在,当我尝试创建 Container<Integer> container 然后像这样添加一些内容时
container.add(1);
container.add(2);
container.add(1); //here the IllegalArgumentException is being thrown.
我得到了例外。 这不是我想要的行为。我需要为添加到容器中的任何整数创建不同的对象。我该怎么做?
【问题讨论】:
-
你试过显式使用
new Integer(123)吗? -
所以你实际上是在创建一个损坏的
Set。为什么要打扰? -
根据您的容器的实现,这 是 正确的行为。另一种选择是删除容器中的“throw-on-same”检查。无论哪种方式,您为什么不坚持使用同样不允许重复的标准 Java
java.util.Set? -
@St.Antario 您希望
Container中有不同的元素,这正是Sets所做的。但是Set定义明确,因此它不会在添加重复项时抛出异常,它根本不会添加它。当然,它以不同的方式定义了 2 个对象的相同性(equals/hashcode和TreeSet的情况下,compareTo)。由于您编写课程的方式,您别无选择,只能在插入值时使用new Integer(1)。 -
基本上,下定决心。你想要一个允许重复的容器吗?如果您想要一个不允许重复的容器,那么您不能将
1放在那里两次。如果你想要一个允许重复的容器,那么你不能使用==来排除元素。但是您似乎想要一个既允许又不允许重复的容器。不要那样做。你的代码很容易出错,没人会理解。