1

认为:

  • 我需要很多用于子类的伴随(类静态)方法Parent
  • 我需要很多方法(非静态)的子类Parent
  • 我有 50 多个子类Parent
  • clazz由于性能,其他一些字段必须按类(而不是实例)计算
  • 期望伴随方法和非伴随方法使用计算成员(例如clazz:)
  • 最后但并非最不重要 Parent的一点,MyCompanion可能有复杂的逻辑,但类似的子ParentChild应该尽可能采用最简单的形式

问题:

如何Child在以下两个表达式中检索正确的类名:

Child().printClass()
Child.printClassUsingCompanion()

代码:试试看

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
}
4

0 回答 0