#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
}