gpt4 book ai didi

static - 如何从kotlin中的伴随对象访问外部类的javaClass.simpleName?

转载 作者:行者123 更新时间:2023-12-02 11:43:10 29 4
gpt4 key购买 nike

我希望能够从类的伴生对象访问它的 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 和所有 Outer 函数中使用 COMPANION_TAG。我可以从任何需要的地方访问 COMPANION_TAG,但不幸的是,我只能通过这种方式获取“Companion”,而不能获取“Outer”。

  2. 从伴生对象的 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()

最佳答案

为了在 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 static 类似。看这个discussion .

关于static - 如何从kotlin中的伴随对象访问外部类的javaClass.simpleName?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48533434/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com