我可以从 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>())
}
在某些情况下,我想在基础 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>())
}