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