我有这个功能
fun <T> safe(t: T?): T {
return Optional.ofNullable(t).orElseThrow { IllegalStateException("safe value should not be null") }
}
我用它来表示我知道T现在不为空,所以把它的不可为空的形式还给我。
所以我这样声明,
class SomeType(val someOtherType: SomeOtherType?)
但是在其他地方的一些someOtherType
则这样声明:
class SomeThirdType(val someOtherType: SomeOtherType)
因此在SomeType
中,我具有以下功能:
class SomeType(val someOtherType: SomeOtherType?) {
fun doSomeDamage(): SomeThirdType {
//some work
return SomeThirdType(safe(someOtherType))
}
}
我对safe
函数不满意,有更好的方法吗?我觉得这里缺少基本的东西
答案 0 :(得分:2)
Kotlin已经为您提供了用于可空类型的工具。我只会使用范围函数和/或Elvis运算符。在您的特定情况下,elvis运算符似乎足够。
class SomeType(val someOtherType: SomeOtherType?) {
fun doSomeDamage(): SomeThirdType {
//some work
return SomeThirdType(someOtherType ?: error("someOtherType should not be null"))
}
}
答案 1 :(得分:0)
SomeType
类的“用户”不会期望通过简单的doSomeDamage()
函数调用而崩溃。 SomeType
已完全构建,但doSomeDamage
可能会崩溃。
我个人更喜欢:
fun doSomeDamage(someOtherType: SomeOtherType): SomeThirdType // with no-arg constructor
或者如果SomeOtherType
确实确实属于SomeType
(我觉得不属于):
fun doSomeDamage(): SomeThirdType? = someOtherType?.let{...}