我可以从 ChildClass 的 BaseClass 执行继承的静态函数并获取子属性吗?

Can I execute inherited static functions from a BaseClass from a ChildClass and get the childs properties?

在某些情况下,我想在基础 class 中添加静态函数或值,以便我可以在继承自它的所有子class 中使用它们。

一个这样的例子是当我想为每个 class 创建通用标签以在数据映射中用作键时,例如当我想查找片段或在活动之间传递数据时。

例如:

open class BaseClass(){

  companionObject{
    val TAG: String = this.javaClass.simpleName
  }
}

class ChildClass: BaseClass()

class Main: Activity(){

  fun startActivity(){
    val intent = Intent(this, ChildClass::class.java)
    intent.putExtra(ChildClass.TAG, data)
    startActivity(intent)
    finish()
  }
}

这可以做到还是我必须为每个 class 创建一个伴随对象?

嗯...我想,你做不到。如本文所述:https://proandroiddev.com/a-true-companion-exploring-kotlins-companion-objects-dbd864c0f7f5 伴随对象实际上是 BaseClass 中的 public static final class。所以,我认为,你不能这样做。

我不知道有同伴的解决方案。但是您可以针对特定用例使用全局具体化内联函数,您在问题中提到:

open class BaseClass()
class ChildClass: BaseClass()

inline fun <reified T> tagOf() = T::class.java.simpleName

fun main(args: Array<String>) {
    println(tagOf<BaseClass>())
    println(tagOf<ChildClass>())
}