在Kotlin中使用Java库时,使用起来更惯用吗?要么 !!方法返回值?

洛可可

我是Kotlin的新手,有一个共同的模式,我不确定如何最正确地应对。以下面的代码为例,它不会编译:

git_repo?.add().addFilepattern()

add()是纯Java的JGit库中的调用,因此其返回类型为AddCommand!

我有两个选择:

git_repo?.add()!!.addFilepattern("test.txt")

git_repo?.add()?.addFilepattern("test.txt")

两者都很好并且鉴于

  1. 我不知道图书馆实施的复杂性,

  2. JGit库的文档未指定是否add()可以返回null,并且

  3. 在这种情况下,我通常不希望add()返回null

从习惯上讲,哪个版本更适合用Kotlin编写?似乎这是一个相当普遍的问题,因为基本上每个非Kotlin库都会引入此问题。

杰森·米纳德(Jayson Minard)

我会使用?. 安全运算符,然后在?: 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章