LruCache
是一张地图,但我想使用LruCache
来缓存字符串,即我希望LruCache作为HashSet工作。
我应该如何定义LruCache
课程?
LruCache<String, Void>
无效,因为当我的代码名为lruCache.put("abc", null)
时,NullPointerException
被抛出。
感谢。
答案 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"));