Я хотел бы проверить существование ResourceBundle без его фактической загрузки.
Обычно я использую Guice, и во время инициализации я хочу проверить существование, в то время как во время выполнения я хочу загрузить его. Если пакет не существует, я хочу получить раннее сообщение о несуществовании РБ.
Если бы можно было получить экземпляр ResourceBundle.Control, используемый для определенного ResourceBundle, у меня не возникло бы проблем с получением базовой информации для построения фактического имени ресурса (используя toBundleName () и toResourceName ()), но это не так дело на этом уровне.
Edit:
Хорошо, я нашел способ сделать это. Я создам ResourceBundle.Control, который является расширяемым (с использованием обычного addFormat (String, Class)) для хранения всех форматов комплекта, а затем использую другой собственный метод для проверки всех возможных имен файлов для определенной локали (используя Class. getResource, как указано ниже).
Кодирование говорящего:
class MyControl extends ResourceBundle.Control {
private Map<String,Class<? extends ResourceBundle>> formats = new LinkedHashMap();
public void addFormat(String format,Class<? extends ResourceBundle> rbType) {
formats.put(format, rbType);
}
public boolean resourceBundleExists(ClassLoader loader, String baseName, Locale locale) {
for (String format: formats.keySet()) {
// for (loop on locale hierarchy) {
if (loader.getResource(toResourceName(toBundleName(baseName, locale), format)) != null) {
return true;
}
// }
}
return false;
}
}