gpt4 book ai didi

java - 为什么可以使用默认参数而不是方法调用 kotlin 的构造函数?

转载 作者:行者123 更新时间:2023-11-30 07:49:29 24 4
gpt4 key购买 nike

我很好奇为什么可以使用默认参数调用 kotlin 的构造函数而不是来自 java 代码的方法?

例如:

class Test(val test: String = "")

Java 客户端:

void test() {
new Test();
}

没关系。

但是如果我想用方法做同样的事情,那是不可能的:

class Test {
fun x(x: Int = 5) { }
}

Java客户端,编译错误:

void test() {
new Test().x();
}

在我看到的方法的反编译为java字节码中

x$default

方法。它是静态的,我不能从 java 中调用它(idea 不允许我这样做)。并且只添加

@JvmOverloads

使用默认 arg 对 kotlin 方法的注释创建了一个可以从 java 端访问的方法。

问题是为什么有两种方法可以从 java 调用 kotlin 的默认值?为什么不默认做所有可访问/不可访问的事情?这是一个糟糕的设计还是有充分的理由这样做?

最佳答案

我相信,当前设计背后的考虑是基于这样一个事实,即类中存在默认(无参数)构造函数是 JVM 上广泛使用的约定:有许多依赖它的库和框架(例如依赖注入(inject)工具,JSR-305)。因此,在所有参数都有默认值时生成无参数构造函数支持这些用例,并且可能是用户所期望的。

相反,函数通常没有所有参数的默认值,我认为 Java 世界中的任何习语都不需要它。此外,您可以预期 Kotlin 类中有许多具有默认值的函数,默认情况下为它们生成重载会导致不希望的方法数量增长,这对 Android 尤为重要。

关于java - 为什么可以使用默认参数而不是方法调用 kotlin 的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48531600/

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