Как создать экземпляр базового класса с разными универсальными типами?

#java #android #generics #kotlin

#java #Android #универсальные #kotlin

Вопрос:

Я пытаюсь создать 2-й конструктор и вызвать родительский класс с другим универсальным типом на основе вызова конструктора. 1 тип — GroupTrackInfoDTO, а другой — TrackInfoDTO, но я продолжаю получать ошибку компиляции

Конфликт объявлений платформы: следующие объявления имеют одинаковую сигнатуру JVM

Мой код:

 class GetSettingsTask
: BizOperationTask {

private var mCallback: BizTaskCallback<TrackSettings>? = null

constructor(operation: BizOperation<GroupTrackInfoDTO>,  mCallback: BizTaskCallback<TrackSettings>) : super(operation) {
    this.mCallback = mCallback
}


constructor(o: BizOperation<TrackInfoDTO>, mCallback: BizTaskCallback<TrackSettings>) : super(o) {
    this.mCallback = mCallback
}
  

если я добавлю фиктивный параметр к одному из конструкторов, это сработает, но понятия не имею, почему

 constructor(o: BizOperation<TrackInfoDTO>, mCallback: BizTaskCallback<TrackSettings>, i: Int = 0) : super(o) {
        this.mCallback = mCallback
    }
  

Ответ №1:

Это одна и та же сигнатура JVM. Вы можете определить абстрактный класс ( AbstractTrackInfoDTO ), который является родительским для TrackInfoDTO , а GroupTrackInfoDTO затем объявить конструктор, как показано ниже:

 constructor(operation: BizOperation<AbstractTrackInfoDTO>,  mCallback: BizTaskCallback<TrackSettings>) : super(operation) {
    this.mCallback = mCallback
}