Java 创造;“公众”;kotlin类中的常量

Java 创造;“公众”;kotlin类中的常量,java,android,kotlin,constants,Java,Android,Kotlin,Constants,也许这是一种不好的做法,但在Java中,我经常创建如下内容: public class MyService extends Service { public static final String ACTION_CONNECTED = "blablabla"; ... } 并在另一个类中引用它,如: MyService.ACTION_CONNECTED 这太棒了。我可以将我的常量与它们的类很好地关联起来 我在科特林似乎找不到一个类似的例子。我看到很多建议人们创建常量文件(对象)的解决

也许这是一种不好的做法,但在Java中,我经常创建如下内容:

public class MyService extends Service {

  public static final String ACTION_CONNECTED = "blablabla";

...
}
并在另一个类中引用它,如:

MyService.ACTION_CONNECTED
这太棒了。我可以将我的常量与它们的类很好地关联起来

我在科特林似乎找不到一个类似的例子。我看到很多建议人们创建常量文件(对象)的解决方案,但我认为这不是很优雅。我希望有某种方法可以在文件外公开顶级的
const val BLAB
,这样我就可以继续使用
ClassName.CONSTANT
语法,但它看起来不像是在卡片中

在类之间共享常量方面,是否存在(以及它是什么)Kotlin与旧的
公共静态final
相等

class MyService  {
    companion object {
        @JvmStatic const val ACTION_CONNECTED = "blablabla"
    }
}

MyService.ACTION_CONNECTED 

根据Jetbrains在本视频中的说法,这将相当于kotlin的公共静态决赛:

有3种方法可以为类创建静态方法或函数:

  • 在顶层声明静态成员(默认方法)
  • 在对象内声明它们(单例)
  • 在同伴对象中声明它们
  • 如果您希望尽可能地模仿Java中的体验,那么使用方法1应该是最简单的方法。您可以使用引擎盖下的getter或直接访问来访问成员。下面是一个例子:

    MyService.kt将是Kotlin文件的名称

    val ACTION_CONNECTED = "blablabla"
    
    class MyService :Service{
    //your other class details
    }
    
    您可以像这样从另一个Kotlin文件或活动访问它:

    val myAction=ACTION_CONNECTED
    
    如果将其标记为const也会更好,因为它是一个常量值,如下所示:

     const val ACTION_CONNECTED = "blablabla"
    
    class Counter{
       companion object{
        val lastCount = 1
       }
    }
    

    如果要在kotlin中创建最终变量,请使用
    val
    而不是
    var

    val LastCount = 1
    
    对于创建静态变量,请使用
    伴生对象

    companion object{
        val lastCount = 1
       }
    
    现在您想在其他类中访问此变量。 因此,创建一个新类,如下所示:

     const val ACTION_CONNECTED = "blablabla"
    
    class Counter{
       companion object{
        val lastCount = 1
       }
    }
    
    然后像这样在整个项目中使用它

    Counter.lastCount 
    

    如果您的静态变量或方法仅从Java引用,您还可以为Java添加@JvmStatic注释,如
    MyService.ACTION\u CONNECTED
    static syntaxI不会说“仅从Java”;如果它们同时从Java和Kotlin中引用,这也很有用。我一直在使用伴随对象,但在文档中这种范围对我来说从来都不明显。出于某种原因,我认为您只能访问关联类中的伴生对象中的内容。额外的
    MyService.ACTION\u CONNECTED
    起了作用。谢谢这是我在StackOverflow中的第一个答案:Dyeah,这就是我为什么要发表评论的原因。而不是旗帜I’我会尽量多加评论和描述,这样你的答案就不会得到反对票。我会记住的。谢谢。这回答了你的问题吗?我想我要寻找的是,在Java中,常量是如何作用于类(不是全局的),而是公共的。我认为这使代码更具可读性,并且能够重用常量名称而不产生歧义也很好。也就是说,它实际上看起来像是我想要的伴星!似乎没有人能让那个示例用例变得显而易见(至少对我来说)。