このチュートリアルはJavaチュートリアルのOracleから見ましたが、実際にどのように動作するのか混乱しています。私は誰かが私に助けてくれることを願っているいくつかの質問を持っていますjavaチュートリアルoracleの国際化を理解できませんリソースバンドルのロードの例をカスタマイズする
1)私はpublic List<Locale> getCandidateLocales(String baseName, Locale locale)
がどこから呼ばれたのか分かりません。 List<Locale>
を返しpublic List<Locale> getCandidateLocales(String baseName, Locale locale)
public List<Locale> getCandidateLocales(String baseName, Locale locale)
3)に引数として渡されるもの
2)、のいずれも文が満たされた場合、どの場合List<Locale>
4)public List<Locale> getCandidateLocales(String baseName, Locale locale)
リターンsuper.getCandidateLocales(baseName, locale);
を返す目的は何ですキーワードスーパーが参照するクラスですか?
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"));
}
}
ありがとうございました!
詳しい説明はありがとうございます!それは私がこれまでに望んでいた以上のものです!btw、私はこのコードスタイルがjava7に先立つというあなたのコメントに興味を持っていました。私は自分自身でコードを思い付くことはなかった、私は実際にJavaのチュートリアルOracleでそれを見つけた。つまり、Oracleチュートリアルは期限切れですか? – Thor
@トニー:残念なことに、残念ながら最新のものを保つには時間がかかるので、答えはある程度あると思います。このコードはまだ動作しますが、手動ヌルチェックの代わりに 'Objects.requireNonNull(basename);'とコンストラクタを直接呼び出す代わりに 'Locale.forLanguageTag(" zh-HK ")'が必要です。後者は議論の余地があるかもしれない。 –