8

staticの変更不可能なインスタンスを初期化するにはどうすればよいandroid.util.SparseArrayですか?

4

3 に答える 3

15

匿名クラスを使用するより良い方法は次のとおりです。

static final SparseIntArray myArray = new SparseIntArray() {
    {
        append(1, 2);
        append(10, 20);
    }
};
于 2013-12-19T02:43:31.040 に答える
9

あなたがしようとしていることをすることはできません。少なくとも、あなたがそれをやろうとしている方法ではありません。変更不可能な実装はありませんSparseArray

ただし、作成することはできます。方法は次のとおりです。

  • クラスを作成し、CustomSparseArray<E>それを拡張しSparseArrayます。
  • 配列内の要素を変更するすべてのメソッドをオーバーライドし、次のように置き換えます。

    @Override
    public void append(int key, E value) {
        if (mLocked)
            return; // Maybe throw an exception
        super.append(key, value);
    }
    
  • 次に、メンバー変数をクラスに追加しますboolean mLocked = false;
  • 次に、次のようなメソッドが必要です。

    public void lock() { mLocked = true; }
    
  • 最後に、他の投稿と同様の方法を使用して静的変数を実装します。

    public class Test {
        private static final CustomSparseArray<Integer> myArray;
        static {
            myArray = new CustomSparseArray<Integer>();
            myArray.append(1, 1);
            myArray.append(2, 5);
            myArray.lock();
        }
    }
    

次に、 variable に unmodifiableSparseArrayがありstaticますmyArray

于 2013-05-06T01:43:32.190 に答える
0

これは私のために働く:

static final SparseIntArray CMyArray = new SparseIntArray();
static {
    CMyArray.append(2, 4);
    CMyArray.append(8, 3);
    CMyArray.append(255, 1);
}

ごとに: https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

于 2017-03-06T09:23:23.087 に答える