Я пытаюсь создать структуру POJO (иначе классы данных в Kotlin) ответа JSON в Kotlin.Я реализовал интерфейс Parcelable для каждого класса данных в структуре.Во всех классах данных я автоматически создал реализацию Parcelable.Проблема заключается в сгенерированном втором конструкторе, в котором IDE жалуется:
Неоднозначность разрешения перегрузки
В нем говорится, что он путается между этими двумя конструкторами:
public constructor GeocodeRes(parcel: Parcel)
public constructor GeocodeRes(responset: ResponseRes)
Что, я считаю, имеет смысл, поскольку ResponseRes также имеет тип Parcelable (ResponseRes реализует Parcelable).Поэтому, вызывая метод GeocodeRes (parcel) (в сопутствующем методе createFromParcel), он запутывается.
Это было до тех пор, пока я не удалил ResponseRes из реализации класса Parcelable, и он все еще показывает ту же ошибку.
Есть ли причина для этого?Я правильно настраиваю это?Во всех дочерних классах данных все они реализуют интерфейс Parcelable (в зависимости от друг друга), но не сталкиваются с какими-либо проблемами.
Вот мой класс GeocodeRes:
import android.os.Parcel
import android.os.Parcelable
import com.google.gson.annotations.Expose
import com.google.gson.annotations.SerializedName
data class GeocodeRes(
@SerializedName("Response") @Expose val responset: ResponseRes
) : Parcelable {
// this is the problem. the IDE is complaining that the usage is too ambiguous (). however, the only usage of this constructor is within this class - just doesn't tell me where exactly.
constructor(parcel: Parcel) : this(parcel.readParcelable(ResponseRes::class.java.classLoader)) {
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeParcelable(responset, flags)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<GeocodeRes> {
override fun createFromParcel(parcel: Parcel): GeocodeRes {
return GeocodeRes(parcel)
}
override fun newArray(size: Int): Array<GeocodeRes?> {
return arrayOfNulls(size)
}
}
}
Вот мой класс ResponseRes:
data class ResponseRes(
@SerializedName("MetaInfo") @Expose val metaInfo: MetaInfo,
@SerializedName("View") @Expose val views: List<View>
): Parcelable
{
[...]//parcel methods
}