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();
        }
    }
    

然后你的变量中有一个不可修改SparseArray的。staticmyArray

于 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 回答