我最近从java转换到了Kotlin。我的代码中有下面的方法,我想问一下是否有更好的方法来用kotlin写它?
这是我的解析方法,从对象obj
解析id
,该对象具有可空属性nullableNestedObject
,并且该对象具有id
属性。
fun parseId(obj: WrappingObject): Long {
val myId = obj.nullableNestedObject?.myId
if (myId === null) {
logger.error("Id not found because of ...")
throw InternalException("Id not found")
}
return myId
}
4条答案
按热度按时间6ojccjat1#
您可以通过将相关代码放入
run()
调用中来稍微简化它:Run是一个scoping function,它提供了一种将代码行分组到一个块中的简单方法。
(If块没有抛出异常,当然它也必须返回一个Long值。)
你会注意到我把它变成了一个单表达式函数--它更短了,也更容易看到它返回了什么 (不过,这只适用于相当短的函数)。
(我还将“ID”大写,这是我的一个问题:这是一个缩写,发音为两个字母,所以两个字母都应该大写, 否则,它看起来就像精神分析中的术语......)
您可能考虑的另一个更改是使其成为
WrappingObject
上的扩展函数:这样,就可以将其称为
myWrappingObject.parseId()
,就好像它是WrappingObject的一个方法一样, 这样可以使名称空间更清晰一些,并让您的IDE提供建议。根据Tulip的回答,如果您不需要调用日志记录器,这将更加简单:
当我编写自定义异常时,我倾向于在构造函数中编写日志条目,这样既可以实现简单性,又可以避免重复的日志调用。
nhjlsmyf2#
如果长整型值可以为空,则可以使用这种方式,并在以后检查空值或非空值
ddarikpa3#
如果您正在寻找简洁(即最小)的代码,我建议使用elvis操作符(
?:
)和run
scope函数:nom7f22z4#
这只是同一主题的另一个变体,只是因为我发现作用域函数和括号有时会使代码不那么简单