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 をキーまたは値として使用することはできません。またはから
get(K)
のnull の戻り値は明確です: キーがキャッシュにありませんでした。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"));