当前位置: 首页 > 知识库问答 >
问题:

静态编程语言-"const"背后的原因是什么

夏宏旷
2023-03-14

这里已经阐明了valconst 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";
}

共有3个答案

郑佐
2023-03-14

正如文档中直接提到的,testConst可以用于注释参数,但是testVal不能。

更一般地说,const保证您有一个Java意义上的常量变量,并且

变量是否为常量变量可能会影响类初始化(§12.4.1)、二进制兼容性(§13.1)、可达性(§14.21)和确定性赋值(§16.1.1)。

唐阳飇
2023-03-14

在我看来,主要的区别在于val意味着不会为属性生成任何setter(但会生成一个getter),也不是说值是常量,const val是常量(就像Java的私有/公共静态final xxx)。

例子:

class Foo {
    private val testVal: String
        get() = Random().nextInt().toString()
}   
夏意蕴
2023-03-14

生成的代码并不总是相同的。

如果testValtestConstpublic,生成的代码就不一样了testVal将是privatepublicget,而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中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。