如何让LruCache只接受密钥?

时间:2013-08-06 17:49:47

标签: android android-lru-cache

LruCache是一张地图,但我想使用LruCache来缓存字符串,即我希望LruCache作为HashSet工作。

我应该如何定义LruCache课程?

LruCache<String, Void>无效,因为当我的代码名为lruCache.put("abc", null)时,NullPointerException被抛出。

感谢。

1 个答案:

答案 0 :(得分:1)

The docs非常明确:

  

此类不允许将null用作键或值。从get(K)put(K, V)remove(K)返回的null值是明确的:密钥不在缓存中。

您可以定义自己的字符串包装类以用于值。您可以使用它的特殊实例来表示空字符串。

public class StringValue {
    public final String string;
    public StringValue(String s) {
        string = s;
    }
    public String toString() {
        return String.valueOf(string); // in case it's null
    }
    public String asString() {
        return string;
    }
    public static final StringValue NULL = new StringValue(null);
}

然后你可以存储一个非null null:

LruCache<String, StringValue> lruCache = new LruCache<String, StringValue>();
lruCache.put("abc", StringValue.NULL);
lruCache.put("def", new StringValue("something"));