可以将Collections.unmodified应用于Collections.EMPTY_MAP

时间:2012-03-09 15:49:28

标签: java collections

private final Map q;
public Info()
{
    this(Collections.EMPTY_MAP);
}

public Info(final Map q)
{
    this.qualifiers = new HashMap(q);
}

   public Map getQ()
{
    return Collections.unmodifiableMap(q);
}

我是否需要使用Collections.unmodifiableMap(),因为我从EMPTY_MAP的JAVA文档中看到它是不可变的?

2 个答案:

答案 0 :(得分:2)

EMPTY_MAP是不可变的,但如果Collections.unmodifiableMap(q)已使用非EMPTY_MAP的地图实例化,则仍需要使用Info,使用第二个构造函数...

答案 1 :(得分:0)

没有。如果要确保类的客户端永远不会修改其内部表示,或者更确切地说,如果要确保在客户端尝试执行此操作时发生故障,则需要使用Collections.unmodifiableMap()。

如果内部地图qCollections.EMPTY_MAP,则您无需将其包含在Collections.unmodifiableMap的调用中,因为它已经无法修改。但是,您有一个替代构造函数,可以将q创建为可修改的Map,在这种情况下,您需要在返回之前保护它。

您也可以简单地返回q的副本,在这种情况下,客户可以修改返回的对象,而无需修改类的内部状态,也不会引发异常。