创建ArrayList时的分类器问题

时间:2018-12-06 22:16:10

标签: android for-loop android-fragments arraylist kotlin

我正在尝试创建一个for-loop以在ArrayList中生成项目,但是我不确定为什么在这种情况下会出现此“伴侣对象”错误。 Product中的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 :(得分:0)

要创建Product的新实例,必须使用相应的构造函数Product()。仅使用Product会使编译器认为您正在尝试使用它没有的companion object。以下是Kotlin documentation的一部分:

  

要创建类的实例,我们将构造函数称为常规函数:

val invoice = Invoice()

val customer = Customer("Joe Smith")
     

请注意,Kotlin没有new关键字。

答案 1 :(得分:0)

在每次迭代的for循环内,您必须通过将数组Productitems中的对应项传递给构造函数来“创建” 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])) }

答案 2 :(得分:0)

您必须像这样实例化您的apiVersion: extensions/v1beta1 kind: Deployment metadata: name: gin-web # Enter deployment name labels: app: gin-web spec: replicas: 3 #Enter the number of replicas template: metadata: labels: app: gin-web tier: service spec: imagePullSecrets: - name: regcred containers: - name: gin-web image: "<your-user>/gin-web:1.0.1" <== Add user here ports: - containerPort: 9090 env: - name: PORT value: "9090" # define resource requests and limits resources: requests: memory: "64Mi" cpu: "125m" limits: #k8 automatically restart container when hit with these Limtis memory: "128Mi" cpu: "250m" # check if gin-web is alive and healthy #Check if MS recieve traffic from k* readinessProbe: httpGet: path: /ping port: 9090 initialDelaySeconds: 5 timeoutSeconds: 5 # check for k8 if container is healthy livenessProbe: httpGet: path: /ping port: 9090 initialDelaySeconds: 5 timeoutSeconds: 5 类:

Product

请注意与此对应的括号:

val product = Product()

注意:

您没有充分利用Kotlin的潜力。看一下以下重构:

  1. // ... constructor() {} // empty secondary constructor of Product // ... 类:

    Product

您可以在主要构造函数中声明属性。

  1. for循环

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

您可以使用mapIndexed将项目转换为产品列表。