如何初始化静态SparseArray

9

1
你没有初始化静态属性。你到底想做什么? - Cat
1
@Eric 这个静态映射的SparseArray等效于stackoverflow.com/a/507658/884677中的答案。 - firyice
1
@Eric 是的,就像我在这个问题和链接的问题/答案中所陈述的那样。 - firyice
你最好使用HashMap来实现这个目的。我曾试图解决同样的问题。 - IgorGanapolsky
3个回答

16

这里有一种更好的方法,使用匿名类:

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

10

你试图做的事情是不可行的,至少你现在的尝试方式是行不通的。目前没有实现不可修改的 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();
        }
    }
    

然后你在静态变量myArray中有一个不可修改的SparseArray


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接