0

LruCacheはマップですが、LruCache文字列のみをキャッシュするために使用したい、つまり、LruCache を HashSet として機能させたいと考えています。

LruCacheクラスはどのように定義すればよいですか?

LruCache<String, Void>lruCache.put("abc", null)私のコードが呼び出されたときにNullPointerExceptionがスローされたため、動作しません。

ありがとう。

4

1 に答える 1

1

ドキュメントはかなり明確です:

このクラスでは、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"));
于 2013-08-06T17:57:18.043 に答える