1. ホーム
  2. java

[解決済み] 修飾子staticは定数変数宣言でのみ使用可

2022-02-16 06:36:10

質問

ゲームに使用するコントロールの情報を格納する内部クラスがあります。その中に、コントロールのすべての名前を保持する静的なArrayListを格納したいと思います。しかし、次のエラーが発生しました: "修飾子staticは定数変数の宣言でのみ許可されています"。

private class Control{
    public static ArrayList<String> keys = new ArrayList<String>();
    public final String key;
    public final Trigger trigger;
    Control(String k, Trigger t){
        key = k;
        trigger = t;
        
        keys.add(key);
    }
}

ArrayListをクラスから取り出して、メインクラスに格納することで簡単に解決できることは分かっています。しかし、私はすべての情報を1つのクラスで保持し、すべてにアクセスできるようにすることを好みます。

Control.key、Control.trigger、Control.keys"。 よりもエレガントで読みやすい。 "key, trigger, keys"

あるいは、私が強迫性障害なだけかもしれませんが、それでも私は自分のやり方でやりたいと思っています。

解決方法は?

を作成することができます。 Control クラスは静的です。

private static class Control {
        ^^^^^^

    // Ok to have static members:
    public static ArrayList<String> keys = new ArrayList<String>();

    ...


これは、Java言語仕様に記載されています セクション§8.1.3

8.1.3 内部クラスと包含するインスタンス
内部クラスは、明示的または暗黙的に静的宣言されていないネストされたクラスです。内部クラスは、静的初期化子 (§8.7) やメンバインタフェースを宣言してはいけません。 内部クラスは、コンパイル時定数フィールドでない限り、静的メンバを宣言してはならない。 (§15.28).