Android 有什么方法可以避免!!科特林密码?
我正在复习一段使用Lottie的代码 这是密码Android 有什么方法可以避免!!科特林密码?,android,kotlin,Android,Kotlin,我正在复习一段使用Lottie的代码 这是密码 class ProgressToProgress(context: Context) : LottieIconTransition( LottieCompositionFactory.fromRawResSync( context, R.raw.downloadprogress).value!!) 在哪里 @Nullable public V getValue() { return value;} 这个getValue()方法来自L
class ProgressToProgress(context: Context) : LottieIconTransition(
LottieCompositionFactory.fromRawResSync(
context, R.raw.downloadprogress).value!!)
在哪里
@Nullable public V getValue() {
return value;}
这个getValue()
方法来自Lottie库,所以我无法控制它。
我不喜欢的是有!!在上面,有趣的是,LottieIconTransition
的构造函数看起来是这样的,它有它的默认参数constructor param
类LottieIconTransition(私有val lottieComposition:lottieComposition=lottieComposition())
我想知道什么是最好的做法,以避免有!!在代码中?这就是我所说的使用工厂方法的意思
class ProgressToProgress {
constructor() : super()
constructor(res: LottieResult<LottieComposition>) : super(res)
companion object {
@JvmStatic
fun create(context: Context): ProgressToProgress {
val res = LottieCompositionFactory.fromRawResSync(
context, R.raw.downloadprogress).value
return if (res == null) {
ProgressToProgress()
} else {
ProgressToProgress(res)
}
}
}
}
class ProgressToProgress{
构造函数():super()
构造函数(res:LottieResult):超级(res)
伴星{
@JvmStatic
乐趣创建(上下文:上下文):ProgressToProgress{
val res=LottieCompositionFactory.fromRawResSync(
上下文,R.raw.downloadprogress).value
返回if(res==null){
ProgressToProgress()
}否则{
进展进展(res)
}
}
}
}
但是,这很麻烦,您可能希望自己指定默认值,即:
class ProgressToProgress(context: Context) : LottieIconTransition(
LottieCompositionFactory.fromRawResSync(
context, R.raw.downloadprogress).value ?: <respecify super default parameter value>)
class ProgressToProgress(上下文:context):lottieintransition(
LottieCompositionFactory.fromRawResSync(
上下文,R.raw.downloadprogress)。值?:)
这就是我所说的使用工厂方法的意思
class ProgressToProgress {
constructor() : super()
constructor(res: LottieResult<LottieComposition>) : super(res)
companion object {
@JvmStatic
fun create(context: Context): ProgressToProgress {
val res = LottieCompositionFactory.fromRawResSync(
context, R.raw.downloadprogress).value
return if (res == null) {
ProgressToProgress()
} else {
ProgressToProgress(res)
}
}
}
}
class ProgressToProgress{
构造函数():super()
构造函数(res:LottieResult):超级(res)
伴星{
@JvmStatic
乐趣创建(上下文:上下文):ProgressToProgress{
val res=LottieCompositionFactory.fromRawResSync(
上下文,R.raw.downloadprogress).value
返回if(res==null){
ProgressToProgress()
}否则{
进展进展(res)
}
}
}
}
但是,这很麻烦,您可能希望自己指定默认值,即:
class ProgressToProgress(context: Context) : LottieIconTransition(
LottieCompositionFactory.fromRawResSync(
context, R.raw.downloadprogress).value ?: <respecify super default parameter value>)
class ProgressToProgress(上下文:context):lottieintransition(
LottieCompositionFactory.fromRawResSync(
上下文,R.raw.downloadprogress)。值?:)
在这种情况下,空值代表什么?您可以抛出更具体的内容,例如value?:error(“加载转换失败”)
。视图可以为null,但可以看到构造函数lottieintransition具有默认值,我想知道传递的参数是否为null,它会崩溃还是构造函数会采用默认值?否,它会崩溃。如果要使用默认值,请执行.value?:
。因此,在构造函数中使用现有逻辑的默认值没有意义,是吗?但是,如果我只执行null断言,如果为null,我将不会将其传递给构造函数,因为构造函数具有默认值。这个构造函数也被其他人使用,我现在不想做更改。如果值为null,则代码>(null断言)将引发异常。我不会导致“没有值被传递,允许使用默认构造函数值”。在使用默认值为参数指定参数时,默认值将永远不会被使用。在这种情况下,空值代表什么?您可以抛出更具体的内容,例如value?:error(“加载转换失败”)
。视图可以为null,但可以看到构造函数lottieintransition具有默认值,我想知道传递的参数是否为null,它会崩溃还是构造函数会采用默认值?否,它会崩溃。如果要使用默认值,请执行.value?:
。因此,在构造函数中使用现有逻辑的默认值没有意义,是吗?但是,如果我只执行null断言,如果为null,我将不会将其传递给构造函数,因为构造函数具有默认值。这个构造函数也被其他人使用,我现在不想做更改。如果值为null,则代码>(null断言)将引发异常。我不会导致“没有值被传递,允许使用默认构造函数值”。在使用默认值为参数指定参数的瞬间,将永远不会使用默认值。