如果错误情况下的接收者为null,请使用let返回

时间:2018-09-03 15:37:58

标签: kotlin

Kotlin 1.2.50

我具有以下提供的依赖关系,该依赖关系将创建MovieListItemDecorator,并在构造函数中将传递一个drawable。但是,getDrawable方法可以返回可为空的值:

@Nullable
public static final Drawable getDrawable(@NonNull Context context, @DrawableRes int id)

我在想如何处理getDrawable返回空值的情况:我在下面指定了2种情况。但是,如果getDrawable确实返回null,我不想在MovieItemDecorator()

的构造函数中传递它

1)

@MovieListScope
    @Provides
    fun provideMovieItemDecorator(context: Context): MovieItemDecorator {
        var drawable: Drawable by Delegates.notNull()

        ContextCompat.getDrawable(context, R.drawable.blue_border)?.let {
            drawable = it
        }

        return MovieItemDecorator(drawable)
    }

2)

 @MovieListScope
    @Provides
    fun provideMovieItemDecorator(context: Context): MovieItemDecorator {
        ContextCompat.getDrawable(context, R.drawable.blue_border)?.let {
           return MovieItemDecorator(it)
        } ?: {
            return MovieItemDecorator(....) /* what to return here */
        }
    }

1 个答案:

答案 0 :(得分:1)

很难理解您的问题,但是我猜想您最终想要一个MovieDecorator。

如果此MovieItemDecorator需要一个drawable参数,那么对于null情况,您必须具有一个drawable(例如ColorDrawable)

@MovieListScope
    @Provides
    fun provideMovieItemDecorator(context: Context) : MovieItemDecorator {
        val drawable = ContextCompat.getDrawable(context, R.drawable.blue_border) ?: ColorDrawable() 
        return MovieItemDecorator(drawable as Drawable)
    }