java.util.Locale
是我想知道我是否太愚蠢或写它的人的那些课程之一。马克戴维斯在吗?
据我所知,这个类不应该被使用。类中的内部缓存是私有的。工厂包私有。equals()
用于==
比较字符串。这意味着我无法比较类的实例是否相等,除非我自己创建实例,将它们放入某个缓存中,违反 DRY。
这是我应该做的吗?这种行为有合理的解释吗???
发生这种情况是因为String
传递给构造函数的所有 s 都是intern()
-ed。一个有问题的做法,但最终的行为是正确的。
三参数构造函数是
public Locale(String language, String country, String variant) {
this.language = convertOldISOCodes(language);
this.country = toUpperCase(country).intern();
this.variant = variant.intern();
}
然后稍后
private String convertOldISOCodes(String language) {
// we accept both the old and the new ISO codes for the languages whose ISO
// codes have changed, but we always store the OLD code, for backward compatibility
language = toLowerCase(language).intern();
您始终可以使用locale.toString()
用于放入地图以解决此问题。
或者您可以包装您的Locale
( class LocaleWrapper { private Locale locale; .. }
),equals
正确实现该方法,然后使用包装器。