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文档中看到它是不可变的?
答案 0 :(得分:2)
EMPTY_MAP是不可变的,但如果Collections.unmodifiableMap(q)
已使用非EMPTY_MAP的地图实例化,则仍需要使用Info
,使用第二个构造函数...
答案 1 :(得分:0)
没有。如果要确保类的客户端永远不会修改其内部表示,或者更确切地说,如果要确保在客户端尝试执行此操作时发生故障,则需要使用Collections.unmodifiableMap()。
如果内部地图q
为Collections.EMPTY_MAP
,则您无需将其包含在Collections.unmodifiableMap
的调用中,因为它已经无法修改。但是,您有一个替代构造函数,可以将q
创建为可修改的Map,在这种情况下,您需要在返回之前保护它。
您也可以简单地返回q
的副本,在这种情况下,客户可以修改返回的对象,而无需修改类的内部状态,也不会引发异常。