[英]Strange behaviour adding HashMap to TreeSet
我在将HashMap<String,String>
到TreeSet<HashMap<String,String>>
遇到以下问题。 代码如下:
... Do something
XMLRoot root = XMLRoot
.newBuild()
.setTrx(
Tag
.newBuild()
.setName("trx")
.addAttribute("type", "04/01")
.addAttribute("id", id));
... => BreakPoint here!
现在,方法addAttribute()
作用是:
public Tag addAttribute(String name, String value) {
// Create the attribute.
HashMap<String, String> att = new HashMap<String, String>();
att.put(name, value);
attributes.add(att);
return this;
}
attributes
变量是TreeSet<HashMap<String,String>>
类型的集合。 现在使用Netbeans调试器,我在创建XMLRoot对象之后立即添加了BreakPoint,而我发现它从未到达断点。 问题在于没有异常抛出,没有错误,什么也没有。 另一个奇怪的事情是,如果我仅使用addAttribute()
方法添加一个元素,那么所有元素都可以正常工作。
问题:是什么原因导致执行终止于第二个元素的TreeSet类的add()方法内?
注意:使用调试器,我设法看到设置了第一个属性,但是我从未到达第二个属性,这意味着在添加第二个元素时,执行突然结束。
详细信息: Apple JDK 1.6.0_51 64位OSX 10.8.4(Mountain Lion)
您几乎肯定会得到ClassCastException
,因为TreeSet
元素必须实现Comparable
而HashMap
却没有。 老实说,我很惊讶编译器允许这样做。 我认为TreeSet
的参数化会更加明确。
您说您正在事件分配线程上运行它。 EDT具有未捕获的异常处理程序,该异常处理程序通常在StdErr上打印异常,但忽略它们。 如果没有看到消息,则可能是该处理程序已被您的应用程序替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.