#kotlin #rx-android
Вопрос:
Я пытаюсь сопоставить объект 1 с другим объектом2. но в объекте 1 есть список. Это мой код. но когда, но я получаю ошибку, говоря, что нельзя использовать. Это объект, который я получаю из API
interface Api {
@GET("/api/")
fun getUsers(@Query("results") results: Int): Single<Dto.Users>
sealed class Dto {
data class Users(
@SerializedName("results") var resultDto: List<Result>
) : Dto()
data class Result(
var cell: String,
var email: String,
var gender: String,
var name: Name,
var nat: String,
var phone: String
) : Dto()
data class Name(
var first: String,
var last: String,
var title: String
) : Dto()
}
}
Еще один класс данных для сопоставления.
sealed class Entity {
data class Users(
val results: List<Result>
) : Entity()
data class Result(
var cell: String,
var email: String,
var gender: String,
var name: Name,
var nat: String,
var phone: String
) : Entity()
data class Name(
var first: String,
var last: String,
var title: String
) : Entity()
}
Это функция расширения, которую я использую для преобразования dto в сущность.
Api.Dto.Users.map() = Entity.Users(
resultDto.map { result ->
Entity.Result(
result.cell,
result.email,
result.gender,
Entity.Name(result.name.first, result.name.last, result.name.title),
result.nat,
result.phone
)
}
)
И как я использую функцию расширения для преобразования dto в сущность.
val data = dataFromServer.applyIoScheduler().map { userObj -> { userObj.map() } }
Комментарии:
1. Покажите код для
Entity
Dto
классов и2. Непонятно, чего вы пытаетесь достичь . Добавьте еще немного информации для того же самого . Является ли эта чистая архитектура тем, чего вы пытаетесь достичь ?
3. @mightyWOZ обновил код классов.
4. @KARUNESHPALEKAR Да, я изучаю чистую архитектуру, Проблема в том, что я получаю ответ как класс DTO, но позже я хочу преобразовать объект DTO в объект сущности.
Ответ №1:
Я попытался привести ваш пример. Как уже упоминалось, вы пропустили Api
, Dto
, Entity
. Но после их добавления я получил рабочий пример (могу скомпилировать). Из-за одинакового названия класса его нелегко понять. Может быть, вы тоже боролись с этим и связывали неправильные типы? Это было вашим намерением?:
open class Entity {
data class Users(
var resultDto: List<Entity.Result>
) : Dto()
data class Result(
var cell: String,
var email: String,
var gender: String,
var name: Entity.Name,
var nat: String,
var phone: String
) : Dto()
data class Name(
var first: String,
var last: String,
var title: String
) : Dto()
}
open class Dto {
data class Users(
val results: List<Dto.Result>
) : Entity()
data class Result(
var cell: String,
var email: String,
var gender: String,
var name: Dto.Name,
var nat: String,
var phone: String
) : Entity()
data class Name(
var first: String,
var last: String,
var title: String
) : Entity()
}
fun Dto.Result.map(): Entity.Users {
return Entity.Users(
listOf(this).map { result ->
Entity.Result(
result.cell,
result.email,
result.gender,
Entity.Name(result.name.first, result.name.last, result.name.title),
result.nat,
result.phone
)
})
}
Комментарии:
1. Спасибо за вашу помощь, но я не уверен, как использовать вашу функцию. не могли бы вы написать для этого метод расширения?
2. Я изменил метод сопоставления на расширение и пропустил локальные переменные. Это делает код более лаконичным, но может раздражать людей, которые не знакомы с расширениями Kotlin .