我最近读到了关于const关键字的文章,我很困惑!我找不到const和val关键字之间的任何区别,我的意思是我们可以使用它们来生成一个不可变的变量,还有什么我遗漏的吗?
您可以将Kotlin转换为Java。然后可以看到const比val多了一个静态修饰符。
静态编程语言:
const val str = "hello"
class SimplePerson(val name: String, var age: Int)
至Java(部分):
@NotNull
public static final String str = "hello";
public final class SimplePerson {
@NotNull
private final String name;
private int age;
@NotNull
public final String getName() {
return this.name;
}
public final int getAge() {
return this.age;
}
public final void setAge(int var1) {
this.age = var1;
}
public SimplePerson(@NotNull String name, int age) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
this.name = name;
this.age = age;
}
}
只是为了补充卢卡的回答:
编译时常量
可以使用const修饰符将编译时已知值的属性标记为编译时常量。此类属性需要满足以下要求:
这些属性可以在注释中使用。
来源:官方留档
常量是编译时常量。这意味着它们的值必须在编译时分配,而不像val可以在运行时分配。
这意味着,const永远不能分配给函数或任何类构造函数,而只能分配给字符串或原语。
例如:
const val foo = complexFunctionCall() //Not okay
val fooVal = complexFunctionCall() //Okay
const val bar = "Hello world" //Also okay
我最近读到了关键字,我很困惑!我找不到和关键字之间的任何区别,我的意思是我们可以使用它们来创建一个不可变的变量,还有什么我遗漏的吗?
问题内容: 在学习电子时,我发现了两种获取BrowserWindow对象的方法。 和 和之间有什么区别? 我不明白为什么可以使用。我是否想念有关JS的重要信息? 问题答案: 这两段代码是等效的,但是第一段代码使用的ES6分解分配要短一些。 这是一个如何工作的简单示例:
和之间有什么区别? 什么时候我只能使用其中一个
问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型
问题内容: jQuery的功能和之间有什么区别? 您将在哪里使用另一个? 问题答案: 适用于输入元素(或任何具有value属性的元素?),而不适用于输入元素。 获取输入元素的值- 与类型无关。获取所有匹配元素的innerText(不是HTML): 结果是一个字符串,其中包含所有匹配元素的组合文本内容。此方法对HTML和XML文档均适用。不能在输入元素上使用。对于输入字段文本,请使用val属性。 获
Kotlin中的和有什么区别? 如本链接所述: 只读属性声明的完整语法与可变属性声明的不同之处在于两个方面:它以val而不是var开头,并且不允许setter。 但就在前面有一个使用setter的示例。 为什么我们两者都需要? 这不是Kotlin中变量的重复,与Java的区别:“var”vs.“val”?因为我询问的是与文档中的特定示例相关的疑问,而不仅仅是一般性的疑问。