尝试使用以下代码在Java 8中加载TestResourceBundle.properties文件时:
ResourceBundle resources = ResourceBundle.getBundle("TestResourceBundle");
我意识到如果在classpath中存在一个具有相同名称的ListResourceBundle类(TestResourceBundle.class),如下所示:
public class TestResourceBundle extends ListResourceBundle {
public Object[][] getContents() {
return contents;
}
private Object[][] contents = {
{ "Test", "Value2" }
};
}
ListResourceBundle类它始终比属性文件具有更高的优先级,最后加载了ListResourceBundle类。
这是标准行为吗?
如果我想加载属性文件资源包,我该怎么办?我不知道类路径中是否存在具有相同名称的ListResourceBundle?
如何确保始终加载属性文件而不是具有相同名称的资源包类文件?
答案 0 :(得分:1)
在ResourceBundle.Control类中,有一个FORMAT_DEFAULT列表,它总是为类资源包提供比属性文件更高的优先级:
public static final List<String> FORMAT_DEFAULT
= Collections.unmodifiableList(Arrays.asList("java.class",
"java.properties"));
我们可以改变覆盖ResourceBundle.Control类的getFormats()方法的优先级排序,如下面的代码所示:
ResourceBundle resources = ResourceBundle.getBundle("TestResourceBundle", new ResourceBundle.Control() {
@Override
public List<String> getFormats(String baseName) {
if (baseName == null) {
throw new NullPointerException();
}
return Collections.unmodifiableList(Arrays.asList("java.properties", "java.class"));
}
});