Static const в Kotlin от имени класса Java

Обычно у меня это есть в 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 } }