我如何知道从Kotlin调用java方法时是否应该在调用站点检查可为null的参数?

我如何知道从Kotlin调用java方法时是否应该在调用站点检查可为null的参数?,java,android,kotlin,call,nullable,Java,Android,Kotlin,Call,Nullable,作为一名初级程序员,我需要从java转到Kotlin,我要问很多关于Kotlin和java之间集成的问题。 我已经阅读了以下链接: 但在调用java方法时,我似乎仍然有困难。 例如,如果我的Kotlin代码中有一个TextView: val secondaryTextColor : Int? = weakReferenceContext.get()?.resources?.getColor(R.color.secondary_text_color) secondaryTextColor?.

作为一名初级程序员,我需要从java转到Kotlin,我要问很多关于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的参数。
我希望我写这篇文章的方式能清楚地说明我在问什么,如果没有,请告诉我,我会尽力详细说明,因为我真的需要一劳永逸地理解
weakReferenceContext.get()?.resources?.getColor(R.color.secondary\u text\u color)
的返回类型是什么

它是一个
Int?
(可为空的
Int

因此,
secondaryTextColor
有一个类型为
Int?
,如果你想在一个需要类型为
Int
(比如你的
someTextView.setTextColor
)的函数中使用它作为参数,你必须找到一种解决方法

为什么
TextView#setTextColor
需要非空参数?如果您查看这些文档,您可以看到它有以下签名:

public void setTextColor(@ColorInt int color)
在签名中,
int
是Java中的一种基本类型。这是不可能为空的。因此,Kotlin将其解释为:

fun setTextColor(@ColorInt color: Int)
这里有不同的方法来解决可空性问题。一种方法是使用
let
块。请看一看以了解更多信息

增编:
@ColorInt
是一个注释<表示颜色的code>Ints可以是对资源
@ColorRes
的引用,也可以是表示压缩的
ARGB
的颜色。查看文档

如果您知道
getColor
不能返回空值,那么您为什么要将
secondaryTextColor
作为
Int?
而不仅仅是
Int
清除?首先,我怎么知道getColor不能返回空值?其次,all路径可以返回null:weakReference.get(),我强调我知道如何使用let,我的示例就是使用let。问题是我怎么知道setTextColor不接受Int?@DorVak我更新了我的答案谢谢。小问题请:):1。@ColorInt有重要意义吗?2.如果java中的函数没有得到基元类型,那么我可以断定可以向它发送一个可为null的类型吗?在没有非基元的可为null性注释的情况下,假设总是不允许
null
,除非该方法的javadocs说null是可接受的。除非文档另有说明,否则假定为非Null是Java的惯例。不过,Kotlin不会强制执行此惯例。这就是<代码>类型是当悬停没有可空性注释的Java方法时可以在IDE中看到的。这意味着您可以传递null(或假设非null返回值),风险由您自己承担。e、 你最好检查一下java文档。