gpt4 book ai didi

kotlin - 为 main 指定默认参数

转载 作者:行者123 更新时间:2023-12-04 22:26:56 25 4
gpt4 key购买 nike

我在这里做错了什么?

fun main(args: Array<String> = arrayOf("abc")) {
val a = args[0]
}

编译正常,但是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0



如果没有指定参数和提供默认值,我想让它成为可选的

最佳答案

由于底层 Java 平台的工作方式以及 Kotlin 如何将默认参数转换为 JVM 可以理解的内容,这可能不起作用。你可以说这是 Kotlin 中的一个错误......

Java 虚拟机寻找具有以下签名的方法来运行您的程序(这是 Java):

public static void main(String[] args)

请注意,Java 中不存在默认参数值,因此如果您在 Kotlin 中声明具有默认值的方法,Kotlin 编译器会在 Java 字节码中生成多个方法,转换为 Java 时将如下所示:
public static void main(String[] args) {
// the normal main method
}

// generated because you have a method with default values
public static void main() {
main(new String[]{ "abc" });
}

当你运行程序时,JVM 仍然会寻找带有 String[] args 的方法。争论。它将忽略为 Kotlin 生成的没有参数的方法 main带有默认参数的方法。

所以它总是会调用 String[] args版本,即使命令行上没有参数 - 导致您收到错误。

解决方法:不要对 main 使用默认值方法;检查方法内部是否给出了参数:
fun main(args: Array<String>) {
val realArgs = if (args.size > 0) args else arrayOf("abc")

// work with realArgs
}

关于kotlin - 为 main 指定默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54788141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com