作为一个初级程序员,我需要从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的参数。我希望我写这篇文章的方式很清楚我在问什么,如果没有请告诉我,我会尽量详细说明,因为我真的需要明白一次,永远
1条答案
按热度按时间roejwanj1#
什么是退货类型
weakReferenceContext.get()?.resources?.getColor(R.color.secondary_text_color)
?它是一个
Int?
(a)可为空的Int
).所以呢
secondaryTextColor
有一种Int?
,如果要将其用作预期类型的函数中的参数Int
(就像你的someTextView.setTextColor
)你得想办法绕过它。为什么会这样
TextView#setTextColor
是否需要非空参数?如果你看这些文件,你会发现它有以下签名:在签名中,
int
是java中的基元类型。这是不可能为空的。因此,kotlin将其解释为:这里有不同的方法来解决可空性问题。一种方法是使用
let
阻止。请看有关空安全的官方文档以了解更多信息附录:
@ColorInt
是注解。Int
表示颜色的s可以是对资源的引用@ColorRes
或者一种颜色,代表一个ARGB
. 看这里的文件