0

LruCache是一个映射,但我想LruCache只缓存字符串,即我希望 LruCache 作为 HashSet 工作。

我应该如何定义一个LruCache类?

LruCache<String, Void>不起作用,因为当我的代码调用lruCache.put("abc", null),NullPointerException时被抛出。

谢谢。

4

1 回答 1

1

文档很清楚:

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

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

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:

LruCache<String, StringValue> lruCache = new LruCache<String, StringValue>();
lruCache.put("abc", StringValue.NULL);
lruCache.put("def", new StringValue("something"));
于 2013-08-06T17:57:18.043 回答