Могу ли я выполнить унаследованные статические функции из BaseClass из ChildClass и получить свойства childs? - PullRequest
0 голосов
/ 25 октября 2018

У меня есть несколько случаев, когда я хочу добавить статические функции или значения в базовый класс, чтобы я мог использовать их во всех подклассах, которые его наследуют.

Один из таких случаев - это когда я хочу создатьобщие теги для каждого класса для использования в отображении данных в качестве ключа, например, когда я хочу найти фрагменты или передать данные между действиями.

Например:

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()
  }
}

Можно ли это сделать илия вынужден создать объект-компаньон для каждого класса?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Я не знаю решения со спутниками.Но вы можете использовать глобальную встроенную функцию reified для конкретного случая использования, который вы упомянули в своем вопросе:

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>())
}
0 голосов
/ 25 октября 2018

Хм ... Я думаю, ты не можешь этого сделать.Как упоминалось в этой статье: https://proandroiddev.com/a-true-companion-exploring-kotlins-companion-objects-dbd864c0f7f5 объект-компаньон - это действительно открытый статический финальный класс в вашем BaseClass.Так что, думаю, ты не сможешь этого сделать.

...