Ошибка классификатора при создании ArrayList - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь создать for-loop для создания элементов в ArrayList, но я не уверен, почему в этом сценарии появляется ошибка «объект-компаньон».Product in val product = Product возвращает ошибку:

У классификатора нет сопутствующего объекта, и поэтому он должен быть инициализирован здесь

внутри фрагмента

    val items = resources.getStringArray(R.array.product_names)
    val itemDescriptions = resources.getStringArray(R.array.product_descriptions)
    for (n in items.indices) {
        val product = Product
        product.productName(items[n])
        product.productDescription(itemDescriptions[n])
        productList.add(product)
    }

Класс продукции

class Product {

    var productName: String? = null
    var productDescription: String? = null

    constructor() {}

    constructor(productName: String, productDescription: String) {
        this.productName = productName
        this.productDescription = productDescription
    }
}

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Внутри цикла for в каждой итерации вы должны «создавать» объект Product, передавая конструктору соответствующие элементы из массивов items и itemDescriptions, а затем добавляя этот объект в список:

val items = resources.getStringArray(R.array.product_names)
val itemDescriptions = resources.getStringArray(R.array.product_descriptions)
for (n in items.indices) {
    val product = Product(items[n], itemDescriptions[n])
    productList.add(product)
}

этот цикл также можно записать так:

items.indices.forEach { productList.add(Product(items[it], itemDescriptions[it])) }
0 голосов
/ 09 января 2019

Вы должны создать свой класс Product следующим образом:

val product = Product()

Обратите внимание на круглые скобки, которые соответствуют этому:

// ...
constructor() {} // empty secondary constructor of Product
// ...

Примечание:

Вы не используете Kotlin в полной мере.Взгляните на следующие рефакторинги:

  1. Product class:

    class Product(val productName: String, val productDescription: String)
    

Вы можете объявить свойства в основном конструкторе.

для цикла

val productList = items.mapIndexed { index, item ->
    Product(item, itemDescriptions[index])
}

Вы можете преобразовать элементы в список продуктов, используя mapIndexed.

0 голосов
/ 07 декабря 2018

Чтобы создать новый экземпляр Product, вы должны использовать соответствующий конструктор Product().Простое использование Product заставляет компилятор думать, что вы пытаетесь работать с его сопутствующим объектом , которого у него нет.Следующее является частью документации Kotlin :

Чтобы создать экземпляр класса, мы вызываем конструктор, как если бы это была обычная функция:

val invoice = Invoice()

val customer = Customer("Joe Smith")

Обратите внимание, что у Kotlin нет ключевого слова new.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...