如何从kotlin中的伴侣对象访问外部类javaClass.simpleName?
我想能够从它的伴侣对象访问我的类的simpleName。
我想这样做:
val o1 = Outer("foo") val o2 = Outer("bar")
打印下面的输出:
Outer: hello Outer: foo Outer: bar
在java中的实际用例是这样的:
class Outer { static final String TAG = Outer.class.simpleName(); // and now I'm able to use Outer.TAG or just TAG in both static and non-static methods }
我尝试了两件事情:
-
将Outer的simpleName赋值给伴随对象的COMPANION_TAG,然后使用伴侣的init中的COMPANION_TAG和遍历Outer的所有函数。 我可以从我需要的任何地方访问COMPANION_TAG,但不幸的是,我只能通过这种方式获得“伴侣”而不是“外”。
-
从伴侣对象的init访问Outer.OUTER_TAG。 这里的问题是,我无法find访问它的方式。
代码如下:
class Outer(str: String) { private val OUTER_TAG = javaClass.simpleName companion object { @JvmStatic val COMPANION_TAG = PullDownAnimationLayout.javaClass.simpleName // gives "Companion" :( init { // how can I access OUTER_TAG? Log.d(OUTER_TAG, "hello") // this gives an error } } init { Log.d(OUTER_TAG, str) // Outer: ... :) Log.d(INNER_TAG, str) // Companion: ... :( } } val o1 = Outer() val o2 = Outer()
为了在Kotlin实现这一点,
class Outer { static final String TAG = Outer.class.simpleName(); // and now I'm able to use Outer.TAG or just TAG in both static and non-static methods }
它应该是
class Outer { companion object { val Tag = Outer::class.java.simpleName val Tag2 = Outer.javaClass.simpleName // This will not work } } println(Outer.Tag) // print Outer println(Outer.Tag2) // print Companion
我想你误解了什么companion
。 companion
类似于Java静态。 看到这个讨论 。