Я видел этот код из учебника Java Oracle, и я смущен относительно того, как он на самом деле работает. У меня есть несколько вопросов, на которые я надеюсь, что кто-то может любезно помочь мне ответитьнеспособный понять java учебник oracle интернационализация Настройка ресурса Bundle Пример загрузки
1) Я не вижу, что public List<Locale> getCandidateLocales(String baseName, Locale locale)
был вызван из любого места, так как он фактически выполняется?
2) то, что передается в качестве аргументов public List<Locale> getCandidateLocales(String baseName, Locale locale)
3) public List<Locale> getCandidateLocales(String baseName, Locale locale)
возвращает List<Locale>
, что цель возвращения List<Locale>
4) public List<Locale> getCandidateLocales(String baseName, Locale locale)
возвращение super.getCandidateLocales(baseName, locale);
, если ни один из, если заявление удовлетворено, который это класс, к которому относится ключевое слово super?
public class RBControl {
public static void main(String[] args) {
test(Locale.CHINA);
test(new Locale("zh", "HK"));
test(Locale.TAIWAN);
test(Locale.CANADA);
}
private static void test(Locale locale) {
ResourceBundle rb = ResourceBundle.getBundle("Internationalisation/RBControl", locale,
new ResourceBundle.Control() {
@Override
public List<Locale> getCandidateLocales(String baseName, Locale locale) {
if (baseName == null)
throw new NullPointerException();
if (locale.equals(new Locale("zh", "HK"))) {
return Arrays.asList(
locale,
Locale.TAIWAN,
// no Locale.CHINESE here
Locale.ROOT);
} else if (locale.equals(Locale.TAIWAN)) {
return Arrays.asList(
locale,
// no Locale.CHINESE here
Locale.ROOT);
}
return super.getCandidateLocales(baseName, locale);
}
});
System.out.println("locale: " + locale);
System.out.println("\tregion: " + rb.getString("region"));
System.out.println("\tlanguage: " + rb.getString("language"));
}
}
Еще раз спасибо за помощь!
Большое спасибо за подробное объяснение! это больше, чем я когда-либо надеялся!Кстати, я был заинтригован вашим комментарием, что этот стиль кода предшествует java7. Я сам не придумал код, я нашел его на Java-учебнике Oracle. Значит ли это, что Oracle Tutorials устарели? – Thor
@ Тони: Ну, к сожалению, требуется время, чтобы поддерживать актуальность, поэтому я думаю, что ответ в какой-то степени да. Код по-прежнему работает, но есть вещи, которые нуждаются в обновлении, т. Е. 'Objects.requireNonNull (basename);' вместо ручной проверки на нуль и 'Locale.forLanguageTag (" zh-HK ")' вместо прямого вызова конструктора. Последнее может быть спорным. –