列挙型インスタンスはJavaの列挙型に「含まれています」か?

Mr_and_Mrs_D

リプロデューサー:

enum IDs {
    ID {

        @Override
        void getId() {
            w(); // warning here
        }
    };

    void getId() {}

    private static void w() {}
}

警告が発せられました:

タイプIDからの囲みメソッドw()へのアクセスは、合成アクセサーメソッドによってエミュレートされます。

合成メソッドとは何かを理解しています-私が得られないのは、それらが列挙型とどのように関係するかです-列挙型インスタンスには、列挙型で定義したすべてのプライベートメソッドがあると思います。インスタンスは本当にネストされたクラスですか?

トムアンダーソン

IDここで行うように、メソッドを定義するenumインスタンスは、enumクラスの暗黙的な匿名サブクラスのシングルトンです。通常のアクセスルールはサブクラスと列挙型クラスの間に適用されるため、列挙型クラスのプライベート機能を表示するには合成アクセサーが必要です。

Java言語仕様では、このように機能するために列挙型が必要です。

列挙型定数のオプションのクラス本体は、すぐに囲む列挙型を拡張する匿名クラス宣言(§15.9.5)を暗黙的に定義します。クラス本体は、匿名クラスの通常のルールによって管理されます。

それは確かにそれらが実際に実装される方法です。JDKのjavacでは、これはJavacParser::enumeratorDeclaration3344行目(このバージョン)で発生します。

JCClassDecl body = null;
if (token.kind == LBRACE) {
    JCModifiers mods1 = F.at(Position.NOPOS).Modifiers(Flags.ENUM | Flags.STATIC);
    List<JCTree> defs = classOrInterfaceBody(names.empty, false);
    body = toP(F.at(identPos).AnonymousClassDef(mods1, defs));
}
if (args.isEmpty() && body == null)
    createPos = identPos;
JCIdent ident = F.at(identPos).Ident(enumName);
JCNewClass create = F.at(createPos).NewClass(null, typeArgs, ident, args, body);

関連するビットLBRACEは、宣言に左中括弧()がある場合、クラス本体がclassOrInterfaceBody(...)匿名クラス(names.emptyに対して解析され(、これがインスタンス作成式(NewClass(..., body))のクラス本体として使用されることです。JCNewClass必要に応じてノードのコンパイルを実行できますが、javadocと同様に、次のようにモデル化されていると言えば十分です。

 * A new(...) operation.

ご存知のように、newクラス本体を使用し操作では、匿名クラスが作成されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

列挙型インデックスのタイプとして、BTREEまたはHASHは小さいですか?

Javaはリフレクションを介して列挙型のインスタンスを作成します

2種類の列挙型のいずれかからEnumSetをインスタンス化します

列挙型からのTypescript型推論は、「型のインスタンス化は非常に深く、おそらく無限です」をスローします。

ループせずに使用できるJava列挙型のインスタンスはいくつありますか?

列挙型に基づいてインターフェイスを定義できますか?

JavaのMIMEタイプに列挙型はありますか?

整数から列挙型をインスタンス化するにはどうすればよいですか?

Blazor列挙型の範囲、CS1729'RangeAttribute 'には、4つの引数を取るコンストラクターが含まれていません

Javaで列挙型をオンにします:修飾されていない列挙型定数

C ++の列挙型に静的ポインタアドレスを格納する方法はありますか?

Jsonスキーマは列挙型に「含まれていません」?

Kotlinのプロパティを使用して列挙型インスタンスにアクセスするにはどうすればよいですか?

タイプスクリプトで文字列を列挙型に変換するときに、インデックス式が列挙型の「数値」型ではないため、要素は暗黙的に「任意」の型になります

インスタンスのないJava列挙型

列挙型ボクシングまたは型キャストの列挙型

PowerMockとMockitoを使用して列挙型クラスのインスタンスをモックするにはどうすればよいですか?

列挙型のプライベートフィールドが含まれているクラスに表示されるのはなぜですか?

列挙型はインスタンス化されない可能性がありますエラー

Gettin列挙型はインスタンス化されない可能性があります例外

すべての値を文字列に変換するさまざまなタイプのスライス値を含む列挙型にイテレータを実装するにはどうすればよいですか?

別の列挙型内で宣言されたすべてのネストされた列挙型のコレクションまたは配列を取得するにはどうすればよいですか?

ネストされた列挙型を含む列挙型のすべての値を反復処理するにはどうすればよいですか?

最初に列挙型スロー「シーケンスに要素が含まれていません」

同じSwift列挙型の異なるインスタンスをどのように比較しますか?

Javaは列挙型の共変リターンタイプをサポートしていませんか?

JAVAのリストにこの列挙型のコンストラクタを定義しますか?

インターフェイスを実装する列挙型はベリファイアによって拒否されます(java.lang.VerifyError)

列挙型は、同じ列挙型内の他の列挙型に関して定義できますか?

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    Ansibleで複数行のシェルスクリプトを実行する方法

  3. 3

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  4. 4

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  5. 5

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  6. 6

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  7. 7

    パンダは異なる名前の列に追加します

  8. 8

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  9. 9

    グラフ(.PNG)ファイルをエクスポートするZabbix

  10. 10

    Chromeウェブアプリのウェブビューの高さの問題

  11. 11

    ラベルとエントリがpythontkinterに表示されないのはなぜですか?

  12. 12

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  13. 13

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  14. 14

    Reactでclsxを使用する方法

  15. 15

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

  16. 16

    テキストフィールドの値に基づいて UIslider を移動します

  17. 17

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  18. 18

    MLでのデータ前処理の背後にある直感

  19. 19

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  20. 20

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  21. 21

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

ホットタグ

アーカイブ