1

次のように匿名クラスを宣言する場合:

ResourceBundle.Control は具象クラスであることに注意してください。

hereから取得したスニペット。

private static void test(Locale locale) {
    ResourceBundle rb = ResourceBundle.getBundle("ResourceBundle", locale,
         new ResourceBundle.Control() {
         @Override
         public List<Locale> getCandidateLocales(String baseName, Locale locale) {
             if (baseName == null)
             throw new NullPointerException();
             if (locale.equals(new Locale("it", "IT"))) {
             return Arrays.asList(
                 locale,
                 Locale.ITALY,
                 Locale.CHINESE ,
                 Locale.ROOT);
             } else if (locale.equals(Locale.GERMANY)) {
             return Arrays.asList(
                 locale.GERMANY,
                 // no Locale.CHINESE here
                 Locale.ROOT);
             }
             return super.getCandidateLocales(baseName, locale);
         }
         });

基本的にextends、匿名クラスを宣言するときにキーワークが使用されていないことがわかります。それは当たり前のことですか?extendsもしそうなら、いつ匿名クラスで使用するのが適切ですか?

前もって感謝します。

4

1 に答える 1

8

extends匿名クラスで使用するのが適切なのはいつですか?

一度もない。キーワードextendsは、クラスの拡張に加えてインターフェイスを実装できる名前付きクラスに適しています。対照的に、匿名クラスはインターフェイスを実装するか、クラスを拡張できますが、両方はできません。そのため、構文にキーワードがまったくありません。new式の後に中括弧を置き、基本クラスまたはインターフェイスのメソッドの実装を提供するだけです。

于 2013-06-06T13:44:02.380 に答える