Pet*_*ter 15

这是使用匿名类的更好方法:

static final SparseIntArray myArray = new SparseIntArray() {
    {
        append(1, 2);
        append(10, 20);
    }
};
Run Code Online (Sandbox Code Playgroud)


Eri*_*ric 9

你无法做你想做的事.至少,不是你如何尝试这样做.没有任何实现SparseArray是不可修改的.

但是,您可以创建一个.这是如何做:

  • 比如创建一个类,CustomSparseArray<E>并让它扩展SparseArray.
  • 覆盖更改数组中元素的所有方法,并用以下内容替换它们:

    @Override
    public void append(int key, E value) {
        if (mLocked)
            return; // Maybe throw an exception
        super.append(key, value);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后,将一个成员变量添加到类中boolean mLocked = false;.
  • 接下来,您需要一个如下方法:

    public void lock() { mLocked = true; }
    
    Run Code Online (Sandbox Code Playgroud)
  • 最后,使用类似于其他帖子的方法实现您的静态变量:

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

然后你SparseArraystatic变量中有一个不可修改的myArray.