LruCache
是一个映射,但我想LruCache
只缓存字符串,即我希望 LruCache 作为 HashSet 工作。
我应该如何定义一个LruCache
类?
LruCache<String, Void>
不起作用,因为当我的代码调用lruCache.put("abc", null)
,NullPointerException
时被抛出。
谢谢。
LruCache
是一个映射,但我想LruCache
只缓存字符串,即我希望 LruCache 作为 HashSet 工作。
我应该如何定义一个LruCache
类?
LruCache<String, Void>
不起作用,因为当我的代码调用lruCache.put("abc", null)
,NullPointerException
时被抛出。
谢谢。
文档很清楚:
此类不允许将 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"));