Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 类型是什么意思!在科特林?_Kotlin_Type Systems - Fatal编程技术网

Kotlin 类型是什么意思!在科特林?

Kotlin 类型是什么意思!在科特林?,kotlin,type-systems,Kotlin,Type Systems,我很清楚Kotlin的零安全性。我知道类型(例如:Int?)后的“?”可用于将变量或值声明为可空。我也知道!!运算符用于返回非空值或抛出NPE 一般来说,后面有“?”的类型是可空的,没有“?”的类型是非空的。但当我检查一些变量时,我看到了如下情况: var myVariable:Int 当您使用kotlin代码中的java代码时,就会发生这种情况 //java code public class Foo { public Integer calcNumber() {

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

一般来说,后面有“?”的类型是可空的,没有“?”的类型是非空的。但当我检查一些变量时,我看到了如下情况:

var myVariable:Int

当您使用kotlin代码中的java代码时,就会发生这种情况

//java code
public class Foo {
    public Integer calcNumber()
    {
        return null;
    }
}
如果我使用Foo.calcNumber()函数

将值meh检查为Int!,不是Int也不是Int?。显然,这里的值meh可以为null,但“IDE”无法正确地“检测到”

作为


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

类型符号称为a;这意味着“空能力是未知的”,它允许放松空能力的强制执行。我在这本书中找到了一些例子。。尽管所有的信息都在那里

以下程序被认为是类型安全的,因为Kotlin允许x/Int的类型!要用作“Int或Int”的表达式

但是,如果x的计算结果为null,则对z(Int)的赋值将在运行时失败。(对于类实现类型,NPE可能会延迟使用:基本上,Kotlin选择“让路”。)

因此,它设计用于已知值“不能”在有效程序中为null的情况,尽管该值来自Kotlin类型系统之外的Java。高度适用于Java中的
int
-box-
Integer
,尽管它对来自Java的任何类类型/值都有效。如果Java代码可以返回
null
,那么最安全的做法是立即将值放入
类型?
,然后正确处理null功能

将其与具有类似运行时故障语义的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!
虽然使用int很容易显示,如本例中所示,但这个问题与Java的
int/Integer
类型没有严格的关系。上面链接的文档显示了
String被隐式使用,示例为
item.substring(1)
,其中item是
字符串是允许的/类型安全的,但如果
的计算结果为空,则在运行时将失败。

“平台类型”-;相关问题应提供更多信息。
var a: Int! = 10
var x = JavaIntegerList.get(0); // Int! type inferred by Kotlin
var y: Int? = x;
var z: Int = x;
// 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!