getOrDefault 的替代方法,适用于低于 ANDROID 的 API 24 设备

2022-09-03 17:42:27

我正在编写一个Android应用程序,并且我正在使用一个Java类,该类使用具有以下循环:

for (Set<I> itemset : candidateList2) {
    supportCountMap.put(itemset, supportCountMap.getOrDefault(itemset,0)+ 1);
}

我收到警告 调用要求 API 级别 24 (当前最小值为 16) 在方法上:

supportCountMap.getOrDefault(itemset,0)+1);

此方法是否有任何解决方法,以便它可以在SDK版本低于24的手机上工作,例如棉花糖(23)和棒棒糖(21)?


答案 1

Kotlin:只需使用 elvis 运算符:

  val value = map[key] ?: 0

如果 为空,则该值将为 0。map[key]


答案 2

我建议创建类,复制实现并将你作为额外的参数传递:MapCompatMap.getOrDefaultmap

public class MapCompat {

    public static <K, V> V getOrDefault(@NonNull Map<K, V> map, K key, V defaultValue) {
        V v;
        return (((v = map.get(key)) != null) || map.containsKey(key))
                ? v
                : defaultValue;
    }
}

这种模式在Android支持库中被广泛使用,例如 ContextCompat.getColor就是一个很好的例子。