一个感叹号在Kotlin中是什么意思?我已经见过几次了,尤其是在使用Java api时。但我在文档和StackOverflow上都找不到它。
当前回答
我已经见过几次了,尤其是在使用Java api时
正如s1m0nw1, T!是T还是T?下一个问题是:T是什么??https://kotlinlang.org/docs/reference/null-safety.html上有详细的文档。与Java不同,Kotlin不允许某些元素为空,例如String
为了允许空值,我们可以将变量声明为可空字符串,写入 字符串?: var b:字符串?=“abc” B = null // ok […] b ?长处 如果b不为空,则返回b.length,否则返回null。这个表达式的类型是Int?
其他回答
我已经见过几次了,尤其是在使用Java api时
正如s1m0nw1, T!是T还是T?下一个问题是:T是什么??https://kotlinlang.org/docs/reference/null-safety.html上有详细的文档。与Java不同,Kotlin不允许某些元素为空,例如String
为了允许空值,我们可以将变量声明为可空字符串,写入 字符串?: var b:字符串?=“abc” B = null // ok […] b ?长处 如果b不为空,则返回b.length,否则返回null。这个表达式的类型是Int?
它是平台类型的符号:
T !意思是“T还是T?”
我用有趣的解释来记住这些事情:
?:我不知道它是否为空。 小心!这可能是空的。 !!小心点,是的,我知道。它总是不为空的。
平台类型
类型名或类名以单个感叹号结尾!在Kotlin中称为平台类型。当您在Kotlin中使用不包含可空性信息的旧Java代码时,您会发现它们。
例子:
Nullable信息:Nullable类型
@Nullable字符串在Java中被认为是字符串?芬兰湾的科特林。
Non-null Information:非空类型
Java中的@NotNull字符串被Kotlin视为字符串。
无信息:平台类型
Java中没有注释的字符串被认为是String!芬兰湾的科特林。
如何处理平台类型?
可以将平台类型作为可空值或非空值使用。编译器将允许您调用此类型上的所有方法。如何使用它们是你的责任。如果您知道该值可以为null,那么在对其调用方法之前应该将其与null进行比较。如果你知道它不是空的,你可以直接使用它,但在Java中,如果你对可空性的假设是错误的,你会得到异常。
注意,你不能在Kotlin代码中声明平台类型,它们只能来自Java代码。
继承和平台类型
在Kotlin代码中覆盖Java方法时,您可以选择将参数和返回类型声明为可空或非空。您需要明智地选择这一点,因为如果您决定使参数为非空,Kotlin编译器将为这些非空参数生成非空断言。当你下次从Java访问这个Kotlin代码时,你传递一个空值,你会得到异常。
希望这有助于消除你对平台类型的所有疑虑。
它们被称为平台类型,它们意味着Kotlin不知道该值是否可以为空,它由您决定是否为空。
In a nutshell, the problem is that any reference coming from Java may be null, and Kotlin, being null-safe by design, forced the user to null-check every Java value, or use safe calls (?.) or not-null assertions (!!). Those being very handy features in the pure Kotlin world, tend to turn into a disaster when you have to use them too often in the Kotlin/Java setting. This is why we took a radical approach and made Kotlin’s type system more relaxed when it comes to Java interop: now references coming from Java have specially marked types -- Kotlin Blog
推荐文章
- Kotlin中的单个感叹号
- 如何允许所有网络连接类型HTTP和HTTPS在Android(9)馅饼?
- 如何克隆或复制一个列表在kotlin
- 如何将字符串转换为长在Kotlin?
- 如何在Kotlin解析JSON ?
- 什么Java 8流。收集等价物可在标准Kotlin库?
- Android房间-简单的选择查询-不能访问数据库在主线程
- 如何检查“instanceof”类在kotlin?
- “by”关键字在Kotlin中做什么?
- 导航目标xxx对于这个NavController是未知的
- 我如何解决错误“minCompileSdk(31)指定在一个依赖的AAR元数据”在本机Java或Kotlin?
- 模块是用不兼容的Kotlin版本编译的。其元数据的二进制版本为1.5.1,预期版本为1.1.15
- Kotlin: Public get private set var
- 如何转换列表到地图在Kotlin?
- 从Java访问Kotlin扩展函数