繁体   English   中英

将HashMap添加到TreeSet的奇怪行为

[英]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元素必须实现ComparableHashMap却没有。 老实说,我很惊讶编译器允许这样做。 我认为TreeSet的参数化会更加明确。

您说您正在事件分配线程上运行它。 EDT具有未捕获的异常处理程序,该异常处理程序通常在StdErr上打印异常,但忽略它们。 如果没有看到消息,则可能是该处理程序已被您的应用程序替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM