@trickster2019

Почему не выводиться значение поле класса в цикле for в kotlin?

Добрый день, имеется 3 демонстративных класса, два класса с "продуктом", и один класс для "заказа"
data class Coffee(
        val id:Int,
    	val name:String,
        val price:Int
    )
    
     data class Dessert(
        val id:Int,
    	val name:String,
        val price:Int
    )
    
    data class Order(
    	val id:Int,
        val orderItem:MutableList<Any>,
    )

Потом я создаю экземпляры классов "продукта", и передаю их в класс "заказа"
val coffee=Coffee(1,"test_coffee",2)
    val dessert=Dessert(1,"test_dessert",4)
    val order=Order(3, mutableListOf(coffee, dessert))

после чего я хочу через цикл пройтись по orderItem заказа, и сложить цену всех продуктов которые там хранятся. Но даже при простой попытки вывести ценник возникает ошибка.
for(i in order.orderItem){
        println(i.price)
    }

Unresolved reference: price
При условии того что тип данных внутри цикла определяется правильно.
for(i in order.orderItem){
        println(i::class.java.typeName)
    }

Вывод
FileKt$main$Coffee
FileKt$main$Dessert
  • Вопрос задан
  • 45 просмотров
Решения вопроса 1
@WaterSmith
Android-разработчик. Java, Kotlin
У вас i типа Any, не важно что там у вас по факту, теоретически вы туда можете запихнуть любое значение, а значит поля price может не оказаться. Вам нужно сделать общий интерфейс, например:
interface Product {val price: Int}

data class Coffee(
    val id:Int,
    val name:String,
    override val price:Int
) : Product

data class Dessert(
    val id:Int,
    val name:String,
    override val price:Int
) : Product

data class Order(
    val id:Int,
    val orderItem:MutableList<Product>,
)


Теперь у вас в листе не что угодно, вы явно указали, что там у вас товары, у которых обязательно будет поле price.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы