这里已经阐明了val
和const val
之间的区别。
但我的问题是,为什么我们要使用const
关键字?从生成的Java代码角度来看没有区别。
静态编程语言代码:
class Application
private val testVal = "example"
private const val testConst = "another example"
生成:
public final class ApplicationKt
{
private static final String testVal = "example";
private static final String testConst = "another example";
}
正如文档中直接提到的,testConst
可以用于注释参数,但是testVal
不能。
更一般地说,const
保证您有一个Java意义上的常量变量,并且
变量是否为常量变量可能会影响类初始化(§12.4.1)、二进制兼容性(§13.1)、可达性(§14.21)和确定性赋值(§16.1.1)。
在我看来,主要的区别在于val
意味着不会为属性生成任何setter(但会生成一个getter),也不是说值是常量,const val
是常量(就像Java的私有/公共静态final xxx
)。
例子:
class Foo {
private val testVal: String
get() = Random().nextInt().toString()
}
生成的代码并不总是相同的。
如果testVal
和testConst
是public
,生成的代码就不一样了testVal
将是private
和public
get
,而testConst
将是public
,没有任何getter。所以const
避免生成getter。
它与扩展函数有什么关系?为什么带有的是函数,而不是关键字? 这个主题似乎没有明确的留档,只有关于扩展的知识假设。
我在我的一个项目中使用RxJava,我使用Android Studio插件将我的一个类转换为静态编程语言,并在maplambda(java中的Func1)之一中,中间体返回如下所示。 我不知道这意味着什么。
我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?
我主要使用,和,。最近,我对节省内存产生了兴趣,我意识到即使是很小的字节数也会大得多,这会影响程序,甚至影响移动速度和电池寿命。(尤其是内存中的数据资源) 所以,当数据不需要存储大的数字时,我尝试使用,。例如,字节表示,缩写为。 这是个好主意吗? 我的主要问题是我想知道Kotlin中const val的数据类型,因为它会自动定义数据类型。 它们的数据类型是什么(数字)? 或者我应该这样定义以节省资
初学者最常见的错误是,您试图“静态”地使用类属性,而不创建该类的实例。它会给您留下前面提到的错误消息: 您可以将非静态方法设置为静态方法,也可以将该类的实例设置为使用其属性。 为什么?我不是要求解决办法。如果知道背后的原因是什么,我将不胜感激。最核心的原因!
如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。