Kotlin不允许我的子类将vararg传递给我的超类构造函数

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
}

and here is my SubtractionOperation class:

package br.com.xp.operation

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

The compile says:

Type mismatch Required Value found Array

Can anyone explain why this is not possible?

推荐答案

the docs:

Inside a function a vararg-parameter of type T is visible as an array of T.

So in the SubtractionOperation constructor, values is really an Array<Value>. You need to use the spread operator (*) to forward these on:

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

Kotlin相关问答推荐

如何在数据类中删除空格 (String)?

Webpack 配置未应用于 kotlin 多平台react 项目

当 func 重载时,kotlin 如何确定调用哪个 func?

如何将glide显示的图像下载到设备存储中.Kotlin

伴随对象在变量更改时更改它的值

Kotlin 解构超过五个组件

Kotlin 枚举中的循环引用

如何将 kotlin 集合作为 varagrs 传递?

在 Koin 中提供一个 Instance 作为其接口

防止导航到同一个片段

Kotlin惰性默认属性

无法在Kotlin中使用argb color int值?

如何解决:将Java类转换为Kotlin后出现error: cannot find symbol class ...?

如何在kotlin语言中将字符转换为ascii值

无法解决:androidx.lifecycle:lifecycle-extensions-ktx:2.0.0-alpha1

Gradle:无法连接到 Windows 上的 Kotlin 守护程序

Kotlin数据类打包

保存对象时未填充 Spring Boot JPA@CreatedDate @LastModifiedDate

如何在kotlin用mockito模仿lambda

使用 java lambda 调用 kotlin 函数时,Kotlin 无法访问 kotlin.jvm.functions.Function1