Позвольте мне уточнить несколько вещей.
Для реализации интерфейса необходимы мои подклассы.
Нет способа добиться этого, вы не можете заставить подкласс 'companion object
для реализации вашего интерфейса, поскольку companion object
класса не связан с companion object
его суперкласса.
И мой базовый сопутствующий объект должен быть как-то абстрактным .
Поскольку companion object
является object
, оно не может быть abstract
, поскольку object
также не может быть abstract
.
Сказал, что , у вас есть два варианта для достижения желаемого поведения:
- Использование
TAG
в качестве нестатиального c конечного свойства внутри BaseFragment
:
abstract class BaseFragment : Fragment() {
protected abstract val TAG: String
fun <T : BaseFragment> push(fragment: T) {
/* Here I want to access TAG */
Log.d(TAG, "Push Fragment")
}
}
class FragmentImpl : BaseFragment() {
override val TAG: String = "fragment-impl"
}
Используйте сопутствующие объекты для хранения тега, сделайте тип
T
из
push()
как
reified
и получите доступ к свойству
TAG
внутри объекта-компаньона
T
, используя
отражение .