Tag: 默认参数

有没有办法使用默认值的非可选参数时通过null?

例如,如果我有以下数据类: data class Data( val name: String = "", val number: Long = 0 ) 和可以返回null函数: fun newName(): String? {} fun newNumber(): Long? {} 我知道我可以使用下面的函数的值,如果它们不为null : val newName = newName() val newNumber = newNumber() val data = Data( if (newName != null) newName else "", if (newNumber != null) newNumber else 0 ) 但是,有没有办法只是使用Data类的构造函数中指定的默认值,当值为null ? […]

使用默认参数键入Kotlin函数的签名

假设我有: fun addInvoker(adder: () -> Int = ::add): Int{ return adder() } fun add(num1:Int = 1, num2:Int = 1): Int{ return num1 + num2 } 我得到一个错误,因为:: add有两个参数,但addInvoker的签名要求它有零参数。 但是,如果我将其更改为: fun addInvoker(adder: (Int, Int) -> Int = ::add): Int{ return adder() } fun add(num1:Int = 1, num2:Int = 1): Int{ return num1 + num2 } 然后我不能调用加法器(),也就是用默认参数调用add。 那么,有什么办法可以使::添加默认参数到invokeAdder,但仍然调用添加与adder() […]

Java是否有可能用像Kotlin这样的默认参数来创建一个重载的方法?

我有10多个参数的方法,实际上我应该用生成器模式来写。 但是,我认为转换到Kotlin会是一团糟。 我想知道是否有一种方法可以轻松地像Kotlin那样编写Java呢? 当我们像Kotlin一样创造乐趣的时候 fun foo(bar: Int = 0, baz: Int) { /* … */ } foo(baz = 1) // The default value bar = 0 is used 我们如何在java中编写类似的方法而不写每一个可能的? 例如 不需要写 void foo(int bar, int baz){ … } void foo(int baz){ int bar = 0; }

默认参数和@JvmOverloads如何在Kotlin上工作?

当我们像Kotlin一样创造乐趣的时候 fun foo(bar: Int = 0, baz: Int) { /* … */ } foo(baz = 1) // The default value bar = 0 is used 所以在Java中,我们需要这样写它 不需要写 void foo(int bar, int baz){ … } void foo(int baz){ foo(0,baz); } 假设我们有10个以上的参数。 我想知道Kotlin如何处理这个问题。 Kotlin会生成所有可能的方法吗? 或者它只是产生程序员真正使用的方法?