You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Kotlin函数调用时指定参数名会引发编译错误?

Kotlin调用assertEquals指定参数名编译报错的原因与解决办法

你碰到的这个问题,核心原因是你调用的assertEquals是Java标准库中的方法(比如JUnit的org.junit.jupiter.api.Assertions.assertEquals)。Java默认编译时不会把参数名存入字节码,Kotlin调用Java方法时无法识别这些参数名,所以指定expected、actual就会报错;而不指定参数名时,Kotlin只按参数顺序匹配,自然能正常运行。

解决办法

1. 改用Kotlin原生的assertEquals

直接导入kotlin.test包下的assertEquals,这是Kotlin原生方法,参数名是被保留的,支持直接用参数名调用:

import kotlin.test.assertEquals

assertEquals(
    expected = FakeDataSource.photosList,
    actual = repository.getMarsPhotos(),
)

2. 放弃参数名,按顺序传参

如果必须使用Java版的assertEquals,那就保持无参数名的调用方式,按expected在前、actual在后的顺序传参即可:

assertEquals(
    FakeDataSource.photosList,
    repository.getMarsPhotos(),
)

3. 自定义Java方法时添加参数名注解(仅适用于自己写的Java代码)

如果是你自己编写的Java断言方法,可以给参数添加@org.jetbrains.annotations.ParameterName注解,同时编译Java代码时开启参数名保留(比如用javac -parameters编译),这样Kotlin就能识别参数名了:

import org.jetbrains.annotations.ParameterName;

public class CustomAssertions {
    public static <T> void assertEquals(
        @ParameterName("expected") T expected,
        @ParameterName("actual") T actual
    ) {
        // 断言逻辑
    }
}

内容的提问来源于stack exchange,提问作者Mohammadreza Khahani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:53:16