Kotlin静态常量字段返回修改后的String值

时间:2018-01-27 15:25:55

标签: android kotlin kotlin-reflect kotlin-companion

我正在尝试获取类名的常量String值。但我真的不明白为什么我得到一个修改过的String值。 这是我正在处理的代码:

class TestClass {
    companion object {
            @JvmField
            val TAG1: String = this::class.java.name as String
            val TAG2: String = this::javaClass.name 
    } 
}

在另一个试图达到这样的价值的课程中:

class ComboClass {
    override fun onStart() {
       val tag1 = TestClass.TAG1
       val tag2 = TestClass.TAG2

       // tag1 "packagePath.TestClass$Companion"
       // tag2 "packagePath.TestClass$Companion"
    }
}

为什么我在String值的末尾得到packagePath.TestClass$Companion?我期待得到packagePath.TestClass

由于

1 个答案:

答案 0 :(得分:2)

为什么我在String值的末尾得到packagePath.TestClass $ Companion?

伴随对象具有自己的类,在这种情况下,对象的类型为TestClass$Companion,因此this::class.java.name as Stringthis::javaClass.name都会为您提供伴随对象类的名称。

如何获得TestClass

您需要使用TestClass::class.java.nameTestClass::javaClass.name来获取TestClass