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

Far*_*rid 2 casting kotlin

我试图在将Serializable类型转换为之前检查类型HashMap<String, String>。但是它给出以下警告;

无法检查已删除类型的实例:kotlin.collections.HashMap / * = java.util.HashMap * /

有没有一种方法可以检查Serializable类型是否HashMap<String, String>安全?

params = if (it.getSerializable(ARG_PARAMS) is HashMap<String, String>) {
             it.getSerializable(ARG_PARAMS) as HashMap<String, String>
         } else null
Run Code Online (Sandbox Code Playgroud)

And*_*ana 6

实际上,您无法检查对象是否具有类型,HashMap<String, String>因为在运行时会擦除类型参数。我建议您使用安全的转换:

params = arguments?.getSerializable(ARG_PARAMS) as? HashMap<String, String>
Run Code Online (Sandbox Code Playgroud)

重要:

可能不清楚,但是我的代码没有检查这个参数是否确实是type HashMap<String, String>。您可以通过HashMap<String, Int>,在某些情况下,您会得到一个错误。在我的代码片段中,您只是对编译器说:“我知道会的HashMap<String, String>。把它交给我”。params仅当没有参数或其类型不同于时才为null HashMap