假设:
Parent
的子类,我需要很多伴随的(类似静态的)方法Parent
的子类,我需要很多方法(非静态)Parent
的50多个子类clazz
和其他一些字段由于性能必须按类(而非实例)进行计算clazz
)Parent
和MyCompanion
可以具有复杂的逻辑,但是Parent
的子类(如Child
)应采用最简单的形式,例如可能问题:
如何在以下两个表达式中检索Child
的正确类名:
Child().printClass()
Child.printClassUsingCompanion()
代码:TRY IT
open class MyCompanion {
var clazz = this::class.java.declaringClass.name
// and many more members that will compute using reflection with complex logic
fun printClassUsingCompanion() = println(clazz)
}
open class Parent {
companion object : MyCompanion()
fun printClass() = println(clazz)
}
class Child: Parent() {
companion object : MyCompanion()
}
fun main() {
Child().printClass() //output: Parent
Child.printClassUsingCompanion() //output: Child
}