我是Kotlin的新手,有一个共同的模式,我不确定如何最正确地应对。以下面的代码为例,它不会编译:
git_repo?.add().addFilepattern()
add()
是纯Java的JGit库中的调用,因此其返回类型为AddCommand!
。
我有两个选择:
git_repo?.add()!!.addFilepattern("test.txt")
和
git_repo?.add()?.addFilepattern("test.txt")
两者都很好并且鉴于
我不知道图书馆实施的复杂性,
JGit库的文档未指定是否add()
可以返回null,并且
在这种情况下,我通常不希望add()
返回null
从习惯上讲,哪个版本更适合用Kotlin编写?似乎这是一个相当普遍的问题,因为基本上每个非Kotlin库都会引入此问题。
我会使用?.
安全运算符,然后在?:
Elvis运算符之后添加您自己的异常。这样,您将获得有意义的消息。!!
对于那些不知道什么是复杂性的人来说,使用just并不是一个非常有用的信息。
val cmd = gitRepo.add()?.addFilepattern("test.txt") ?: throw IllegalStateException("assert: gitRepo.add() returned an unexpected null")
cmd.doSomething() // never is null guaranteed
如果值为所有人null
,则将出现自定义错误。
断言:gitRepo.add()返回了意外的null
在这一行之后,您将不必null
检查,因为可以保证表达式的结果永远不会是null
。
如果您检查另一个库的代码,并确保它永远不会null
发生,那么a!!
是合适的。但是,如果不确定,请对自定义消息做一个更好的选择。
请注意,我?.
从您的示例中删除了第一个示例,因为我假设git_repo
自身不可为空。另外,我将其重命名为没有下划线,这不是正常的Kotlin命名约定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句