如何从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 } 

我尝试了两件事情:

  1. 将Outer的simpleName赋值给伴随对象的COMPANION_TAG,然后使用伴侣的init中的COMPANION_TAG和遍历Outer的所有函数。 我可以从我需要的任何地方访问COMPANION_TAG,但不幸的是,我只能通过这种方式获得“伴侣”而不是“外”。

  2. 从伴侣对象的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 

我想你误解了什么companioncompanion类似于Java静态。 看到这个讨论 。