我怎么知道从 Kotlin 调用 java 方法时是否应该在调用站点检查可为 null 的参数?
How can i know when calling a java method from Kotlin if a nullable argument should be checked at call site?
作为一个需要从 java 过渡到 Kotlin 的初级程序员,我问了很多关于 Kotlin 和 Java 之间集成的问题。
我已阅读以下内容 link:
Calling Java From Kotlin
但是我在调用java方法时似乎还是有困难。
例如,如果我的 Kotlin 代码中有一个 TextView:
val secondaryTextColor : Int? = weakReferenceContext.get()?.resources?.getColor(R.color.secondary_text_color)
secondaryTextColor?.let {
holder.someTextView.setTextColor(it)
}
如果没有 let 块,上面的代码 将不会被编译 。如果我尝试在没有 let 的情况下进行编译,它将导致编译错误,提示 setTextColor expected an Int 但得到一个 Int?
我在看java源代码,有什么地方写着int参数不能为空。
因此,我必须知道可能是问题的唯一方法是通过编辑器或通过编译并获取 error。
我在问这是否是一种从 java 源代码中我将能够知道该方法是否接受可为 null 的参数的方法。
我希望我写 post 的方式清楚我在问什么,如果不是请告诉我,我会尽力详细说明,因为我 真的 需要理解一次永远
weakReferenceContext.get()?.resources?.getColor(R.color.secondary_text_color)
的 return 类型是什么?
它是一个 Int?
(可以为 null 的 Int
)。
所以 secondaryTextColor
有一个 Int?
类型,如果你想将它用作期望类型 Int
的函数中的参数(比如你的 someTextView.setTextColor
)你必须想办法解决它。
为什么 TextView#setTextColor
需要一个非空参数?如果您查看文档,您可以看到它具有以下签名:
public void setTextColor(@ColorInt int color)
在签名中,int
是Java中的原始类型。没有机会为 null。因此,Kotlin 将其解释为:
fun setTextColor(@ColorInt color: Int)
这里有不同的方法来解决可空性问题。一种方法是使用 let
块。请查看at the official docs on null safety以了解更多
附录:
@ColorInt
是注释。 Int
表示颜色可以是对资源的引用 @ColorRes
或表示打包 ARGB
的颜色。请参阅文档 here
作为一个需要从 java 过渡到 Kotlin 的初级程序员,我问了很多关于 Kotlin 和 Java 之间集成的问题。 我已阅读以下内容 link: Calling Java From Kotlin
但是我在调用java方法时似乎还是有困难。 例如,如果我的 Kotlin 代码中有一个 TextView:
val secondaryTextColor : Int? = weakReferenceContext.get()?.resources?.getColor(R.color.secondary_text_color)
secondaryTextColor?.let {
holder.someTextView.setTextColor(it)
}
如果没有 let 块,上面的代码 将不会被编译 。如果我尝试在没有 let 的情况下进行编译,它将导致编译错误,提示 setTextColor expected an Int 但得到一个 Int? 我在看java源代码,有什么地方写着int参数不能为空。 因此,我必须知道可能是问题的唯一方法是通过编辑器或通过编译并获取 error。 我在问这是否是一种从 java 源代码中我将能够知道该方法是否接受可为 null 的参数的方法。 我希望我写 post 的方式清楚我在问什么,如果不是请告诉我,我会尽力详细说明,因为我 真的 需要理解一次永远
weakReferenceContext.get()?.resources?.getColor(R.color.secondary_text_color)
的 return 类型是什么?
它是一个 Int?
(可以为 null 的 Int
)。
所以 secondaryTextColor
有一个 Int?
类型,如果你想将它用作期望类型 Int
的函数中的参数(比如你的 someTextView.setTextColor
)你必须想办法解决它。
为什么 TextView#setTextColor
需要一个非空参数?如果您查看文档,您可以看到它具有以下签名:
public void setTextColor(@ColorInt int color)
在签名中,int
是Java中的原始类型。没有机会为 null。因此,Kotlin 将其解释为:
fun setTextColor(@ColorInt color: Int)
这里有不同的方法来解决可空性问题。一种方法是使用 let
块。请查看at the official docs on null safety以了解更多
附录:
@ColorInt
是注释。 Int
表示颜色可以是对资源的引用 @ColorRes
或表示打包 ARGB
的颜色。请参阅文档 here