代码之家  ›  专栏  ›  技术社区  ›  Farid

Kotlin-针对HashMap<String,String>的对象类型检查显示警告

  •  0
  • Farid  · 技术社区  · 6 年前

    我在检查 Serializable HashMap<String, String> . 但它给出了以下警告:;

    kotlin.collections.HashMap/*= java.util.HashMap文件*/

    有没有办法检查一下 可序列化 是的类型

    params = if (it.getSerializable(ARG_PARAMS) is HashMap<String, String>) {
                 it.getSerializable(ARG_PARAMS) as HashMap<String, String>
             } else null
    
    1 回复  |  直到 6 年前
        1
  •  7
  •   Andrei Tanana    6 年前

    实际上,您不能检查对象是否具有类型 HashMap<String, String> 因为类型参数在运行时被删除。我建议你使用安全石膏:

    params = arguments?.getSerializable(ARG_PARAMS) as? HashMap<String, String>
    

    重要提示:

    哈希图<字符串,字符串> . 你可以通过 HashMap<String, Int> 在某些情况下,你会得到一个错误。 在我的代码片段中,您只需对编译器说:“我知道 哈希图<字符串,字符串> . 把它给我”。 params 只有在没有参数或其类型与 HashMap .

        2
  •  0
  •   Infinity_zhang    5 年前

    我认为真正安全的答案是这样的

    val map = hashMapOf<String, String>()
    arguments?.getSerializable("arg0")?.let {
        if (it is HashMap<*, *>) {
            for (item in it) {
                val key = item.key
                val value = item.value
                if (key is String && value is String) {
                    map[key] = value
                }
            }
        }
    }
    if (map.isNotEmpty()) {
        // Serializable is HashMap<String, String>
    }