Java类名中的Kotlin中的静态常量
我通常在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 class Clz
做同样的Clz
以便可以从外部的Java类以相同的方式访问它? 我尝试了以下,但它不编译,因为它不是一个常量:
package some.package object Clz { const val ACTION_DIVE = Clz.javaClass.name + ".action.DIVE" }
Clz::class.java.name
请参阅官方Kotlin文档中的类引用 。
您可以使用:
object Clz { val ACTION_DIVE = Clz::class.java.name + ".action.DIVE" }
请注意,由于它调用java
扩展属性, ACTION_DIVE
可能不是const
。
如果你确实需要一个const,你可以这样做:
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 } }