如何初始化静态SparseArray

时间:2013-05-05 23:00:51

标签: java android collections initialization sparse-array

如何初始化static的{​​{1}}不可修改的实例?

3 个答案:

答案 0 :(得分:15)

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

static final SparseIntArray myArray = new SparseIntArray() {
    {
        append(1, 2);
        append(10, 20);
    }
};

答案 1 :(得分: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; }
    
  • 最后,使用类似于the other post的方法实现静态变量:

    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变量static中有一个不可修改的myArray

答案 2 :(得分: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