首页 文章

如何将vararg传递给Kotlin中的varag函数或构造函数?

提问于
浏览
5

Kotlin不允许我的子类将vararg传递给我的超类构造器这是我的Operation类:

package br.com.xp.operation

import java.util.ArrayList

abstract class Operation(vararg values: Value) : Value {
    protected var values: MutableList<Value> = ArrayList()

    internal abstract val operator: String
}

这是我的SubtractionOperation类:

package br.com.xp.operation

class SubtractionOperation private constructor(vararg values: Value) : Operation(values) {
    override val operator: String
        get() = "-"
}

编译说:

类型不匹配必需值找到数组

任何人都可以解释为什么这是不可能的?

1 回答

  • 25

    来自the docs

    在函数内部,类型T的vararg参数作为T的数组可见 .

    所以在 SubtractionOperation 构造函数中, values 实际上是 Array<Value> . 您需要使用 spread 运算符( * )来转发它们:

    class SubtractionOperation private constructor(vararg values: Value) : Operation(*values) ...
    

相关问题