gpt4 book ai didi

kotlin - 类型是什么意思!在 Kotlin ?

转载 作者:行者123 更新时间:2023-12-02 11:49:11 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Single exclamation mark in Kotlin

(6 个回答)


3年前关闭。




我非常清楚 Kotlin null 的安全性。我知道 ”?”在类型(例如:Int?)之后可用于将变量或值声明为可为空的。我也知道!!运算符用于返回非空值或抛出 NPE。

一般来说,带有“?”的类型之后它将可以为空,并且没有“?”是非空的。但是我在检查一些变量时看到过这样的事情:

var myVariable: Int!



当您使用 kotlin 代码中的 java 代码时会发生这种情况。
//java code
public class Foo {
public Integer calcNumber()
{
return null;
}
}

如果我使用函数 Foo.calcNumber()
//kotlin code
val meh = Foo().calcNumber()
print(meh)

值 meh 被检查为 Int!,而不是 Int 或 Int?。显然,这里的值 meh 可以为空,但它没有被“IDE”正确“检测”。

作为
var a: Int! = 10

无效,我的问题是:带有“!”的类型究竟是什么意思?

最佳答案

Type!符号称为 Platform Type and is critical for Interoperability with the weaker-typed Java ;它的意思是“可空性是未知的”,它允许放松的可空性强制执行。我在 linked question 中找到了示例平淡无奇……虽然所有信息都在那里。
以下程序被认为是类型安全的,因为 Kotlin 允许 x/Int!用作“Int 或 Int?”的表达式。

var x = JavaIntegerList.get(0); // Int! type inferred by Kotlin
var y: Int? = x;
var z: Int = x;
但是,如果 x 的计算结果为 null,则对 z (Int) 的赋值将在运行时失败。 (对于类实现类型,NPE 可能会延迟使用:基本上,Kotlin 选择“让开”。)
因此,它是为已知值在有效程序中“不能”为空的情况而设计的,尽管该值来自 Kotlin 类型系统之外的 Java。高度适用于 int -box- Integer在 Java 中,尽管它对来自 Java 的任何类类型/值都有效。如果Java代码可以返回 null ,将值放入 Type? 中是最安全的立即然后正确处理空能力。
将此与具有类似运行时故障语义的 Java 代码进行比较:
// Java
Integer x = JavaIntegerList.get(0);
Integer y = x; // "No OP" - all class types in Java are null-able
int z = (int)x; // kaboom *at run-time* if x is null!
虽然用整数表示很简单,如本例所示,但此问题与 Java 的 int/Integer 并不严格相关。类型。上面链接的文档显示了一个案例 String!被隐式使用,例如 item.substring(1) ,其中 item 是 String!允许/类型安全,但如果 item 将在运行时失败评估为空。

关于kotlin - 类型是什么意思!在 Kotlin ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51183299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com