我最近在编写程序时遇到了一个异常,仅仅因为编译器给了我一个错误的异常,我花了很多时间来调试。
这是我的活动代码:
private var mCheatMap = HashMap<Int, Boolean>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_quiz)
mCheatMap = savedInstanceState?.getSerializable(KEY_CHEATER) as HashMap<Int, Boolean> ?: HashMap<Int, Boolean>()
}
在运行时,我的应用程序崩溃了,当我查看日志时,它说ActivityNotFound
异常并且在建议中,它说也许我没有在我的AndroidManifest.xml
突然间,我偶然将mCheapMap
变量转换为安全转换,一切似乎都没有错误,一切都开始完美运行。例如:
private var mCheatMap = HashMap<Int, Boolean>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_quiz)
mCheatMap = savedInstanceState?.getSerializable(KEY_CHEATER) as? HashMap<Int, Boolean> ?: HashMap<Int, Boolean>()
}
现在我有一些困惑:
ActivityNotFound
为什么在我遇到强制转换问题时编译器给了我异常?为什么使用安全转换运算符解决了问题,因为即使没有安全转换运算符,我的转换也是正确的?