Ich sah diesen Code von Java-Tutorial Oracle und ich bin verwirrt, wie es tatsächlich funktioniert. Ich habe einige Fragen, die ich hoffe, jemand könnte mir freundlicherweise helfen Antwortnicht in der Lage, Java-Tutorial Orakel Internationalisierung zu verstehen Customizing-Ressourcenpakete Beispiel laden
1) Ich sehe nicht public List<Locale> getCandidateLocales(String baseName, Locale locale)
wurde von überall aufgerufen, so wie wird es tatsächlich ausgeführt?
2), was als Argumente an public List<Locale> getCandidateLocales(String baseName, Locale locale)
geben wird
3) public List<Locale> getCandidateLocales(String baseName, Locale locale)
eine List<Locale>
zurückgibt, was ist der Zweck ein List<Locale>
der Rückkehr
4) public List<Locale> getCandidateLocales(String baseName, Locale locale)
Rückkehr super.getCandidateLocales(baseName, locale);
, wenn keine der if-Anweisung erfüllt ist, welche bezieht sich die Klasse auf das Schlüsselwort 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"));
}
}
Nochmals vielen Dank für jede Hilfe!
Vielen Dank für die ausführliche Erklärung! es ist mehr als ich jemals gehofft hatte!Übrigens war ich fasziniert von Ihrem Kommentar, dass dieser Code-Stil älter ist als Java7. Ich habe den Code selbst nicht gefunden, ich habe ihn tatsächlich im Java-Tutorial Oracle gefunden. Bedeutet das, dass die Oracle Tutorials veraltet sind? – Thor
@Tony: Nun, leider braucht es Zeit, um die Dinge auf dem neuesten Stand zu halten, also denke ich, die Antwort ist zu einem gewissen Grad ja. Der Code funktioniert immer noch, aber es gibt Dinge, die aktualisiert werden müssen, d. H. 'Objects.requireNonNull (Basisname);' anstelle von manueller Nullprüfung und 'Locale.forLanguageTag (" zh-HK ")' anstatt direkt einen Konstruktor aufzurufen. Letzteres könnte jedoch umstritten sein. –