关于反射和继承的Kotlin伴侣对象限制

时间:2019-04-19 23:39:24

标签: inheritance kotlin reflection kotlin-companion

假设:

  • 对于Parent的子类,我需要很多伴随的(类似静态的)方法
  • 对于Parent的子类,我需要很多方法(非静态)
  • 我有Parent的50多个子类
  • clazz和其他一些字段由于性能必须按类(而非实例)进行计算
  • 期望伴随方法和非伴随方法使用计算所得的成员(例如:clazz
  • 最后但并非最不重要 ParentMyCompanion可以具有复杂的逻辑,但是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
}

0 个答案:

没有答案