我怎么知道当从kotlin调用java方法时,是否应该在调用站点检查一个可为null的参数?

xyhw6mcr  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(415)

作为一个初级程序员,我需要从java转换到kotlin,我问了很多关于kotlin和java之间集成的问题。我已经阅读了以下链接:从kotlin调用java
但在调用java方法时,似乎仍然有困难。例如,如果我的kotlin代码中有一个textview:

val secondaryTextColor : Int? = weakReferenceContext.get()?.resources?.getColor(R.color.secondary_text_color)
 secondaryTextColor?.let {
     holder.someTextView.setTextColor(it)
 }

没有let块,上面的代码将无法编译。如果我尝试在没有let的情况下编译,会导致一个编译错误,说settextcolor需要int,但得到int?我正在查看java源代码,在任何地方都可以写int参数不能为null。所以我要知道可能有问题的唯一方法是通过编辑器或者通过编译得到错误。我想问的是,通过java源代码,我是否能够知道该方法是否接受可为null的参数。我希望我写这篇文章的方式很清楚我在问什么,如果没有请告诉我,我会尽量详细说明,因为我真的需要明白一次,永远

roejwanj

roejwanj1#

什么是退货类型 weakReferenceContext.get()?.resources?.getColor(R.color.secondary_text_color) ?
它是一个 Int? (a)可为空的 Int ).
所以呢 secondaryTextColor 有一种 Int? ,如果要将其用作预期类型的函数中的参数 Int (就像你的 someTextView.setTextColor )你得想办法绕过它。
为什么会这样 TextView#setTextColor 是否需要非空参数?如果你看这些文件,你会发现它有以下签名:

public void setTextColor(@ColorInt int color)

在签名中, int 是java中的基元类型。这是不可能为空的。因此,kotlin将其解释为:

fun setTextColor(@ColorInt color: Int)

这里有不同的方法来解决可空性问题。一种方法是使用 let 阻止。请看有关空安全的官方文档以了解更多信息
附录: @ColorInt 是注解。 Int 表示颜色的s可以是对资源的引用 @ColorRes 或者一种颜色,代表一个 ARGB . 看这里的文件

相关问题