我希望能够从它的伴随对象中访问我的类的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
}
我尝试了两件事:
将外部的simpleName分配给配套对象的COMPANION_TAG,然后使用来自配套初始化的COMPANION_TAG和所有外部功能。我可以从我需要的任何地方访问COMPANION_TAG,但不幸的是我只能得到" Companion"而不是"外面"这样。
从配套对象的init访问Outer.OUTER_TAG。问题在于我无法找到访问它的方法。
以下是代码:
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()
答案 0 :(得分:3)
为了在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静态。请参阅此discussion。