Обычно у меня это есть в Java:
package some.package; public class Clz { public static final String ACTION_DIVE = Clz.class.getName() + ".action.DIVE"; }
который доступен извне этого класса как Clz.ACTION_DIVE
и значение будет "some.package.Clz.action.DIVE"
.
Как я могу сделать то же самое в классе Kotlin Clz
чтобы к нему можно было получить доступ так же, как и внешние классы Java? Я попробовал следующее, но он не компилируется, потому что он не является константой:
package some.package object Clz { const val ACTION_DIVE = Clz.javaClass.name + ".action.DIVE" }
Clz::class.java.name
См. Ссылки на класс в официальной документации Котлин.
Вы можете использовать:
object Clz { val ACTION_DIVE = Clz::class.java.name + ".action.DIVE" }
Обратите внимание, что поскольку он вызывает свойство расширения java
ACTION_DIVE
может быть не const
.
Если вам действительно нужна константа, вы можете сделать это в более старых версиях компилятора Kotlin :
object Clz { const val ACTION_DIVE = "" + Clz::class + ".action.DIVE" }
Вы можете объявить companion object
внутри вашего класса и поместить свойство константы внутри.
class Clz { companion object{ var ACTION_DIVE = Clz::class.simpleName + ".action.DIVE" } }
Затем вы можете получить доступ к собственности
println(Clz.ACTION_DIVE)
Элегантный способ конкатенации строк:
package some.package object Clz { val ACTION_DIVE = "${Clz::class.java.name}.action.DIVE" }
работа для меня:
class FetchWeatherTask : AsyncTask<Void,Void,String>() { companion object { @JvmField val TAG: String = FetchWeatherTask().javaClass.simpleName } }