函数默认值
周所周知,Javahtml" target="_blank">语言并不支持参数使用默认值。有人说这是因为“默认参数”和“方法重载”同时支持的话有二义性的问题,具体真正的原因我不得而知。但是对我个人来说,Java不支持这个特性的确挺让我蛋疼的,虽然说使用方法重载也可以间接实现与默认参数这个特性相同的功能,但这就意味着你得写更多的代码……
简要介绍
Kotlin函数定义时,支持对参数指定默认值,这样就有效减少Java之前定义重载函数的数量.
简要对比如下:
1、Java函数定义,如果sayHelloTo函数中的lastName可以使用默认值,则需要定义如下两个函数.
public class Person { public void sayHelloTo(String firstName,String lastName){ System.out.println("Hi,"+firstName+" "+lastName); } public void sayHelloTo(String firstName){ sayHelloTo(firstName,"noLastName"); } }
2、Kotlin定义如下,只需要一个函数
class Person { fun sayHelloTo(firstName: String, lastName: String = "noLastName") { println("Hi,$firstName $lastName") } }
Kotlin函数默认值详细规则
1、可以采用指定全部参数名和不指定参数名的调用方式,推荐采用指定参数名的调用方式(不能指定部分函数参数名,其他的不指定)
正确样例:
sayHelloTo("Jerry","Aha") sayHelloTo(firstName = "Jerry",lastName = "Aha")
错误样例:
sayHelloTo(firstName = "Jerry","Aha")
2、在指定参数名时,所有无默认值参数传入值即可
样例:
sayHelloTo(firstName = "Jerry",lastName = "Aha")
3、在不指定参数名时,则需要区分情况:
如果函数定义时,所有具有默认值的参数都在最后,则可以只传入无默认值参数值.
样例:
函数定义:
fun sayHelloTo(firstName: String, lastName: String = "Aha")
正确样例:
sayHelloTo("Jerry")
如果函数定义时,具有默认值的参数并不都是在最后面,则必须传入所有参数值.
样例:
函数定义:
fun sayHelloTo(firstName: String, middleName: String = "",lastName: String)
正确样例:
sayHelloTo("Jerry","","Aha")
错误样例:
sayHelloTo("Jerry","Aha")
Demo代码
1、Person.kt
class Person( val firstName: String = "Jerry", val lastName: String = "Yin" ) { fun sayHello() { System.out.println("Hi,$firstName $lastName") } fun sayHelloTo(firstName: String = "Baby", lastName: String = "Aha") { System.out.println("Hi,$firstName $lastName") } }
2、Person2.kt
class Person2( val firstName: String = "Jerry", val lastName: String ) { fun sayHello() { System.out.println("Hi,$firstName $lastName") } fun sayHelloTo(firstName: String = "Baby", lastName: String) { System.out.println("Hi,$firstName $lastName") } }
3、调用代码:
Person().sayHello() Person("Jerry1").sayHello() Person("Jerry2", "Yin2").sayHello() Person(firstName = "Jerry3").sayHello() Person(lastName = "Yin4").sayHello() Person().sayHelloTo() Person().sayHelloTo("Baby1") Person().sayHelloTo("Baby2", "Aha2") Person().sayHelloTo(firstName = "Baby3") Person().sayHelloTo(lastName = "Aha4") Person2(lastName = "Yin5").sayHello() Person2("Jerry6", "Yin6").sayHello() Person2("", "").sayHelloTo(lastName = "Yin8") Person2("", "").sayHelloTo("Jerry9", "Yin9")
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。
我想为实现接口的类中的函数参数使用默认值,如下所示: 现在这里是编译的,这里是不编译的: KO:不允许重写函数为其参数指定默认值 KO:类“LocalFileStoreService”不是抽象的,并且没有实现抽象成员公共抽象存储文件(路径:String,负载:InputStream,类型:MediaType):fqn中定义的单元。。。文件存储服务 好 啊: 这是预期的行为吗?有没有更好的方法来管理
对于一些函数,你可能希望它的一些参数是 可选 的,如果用户不想要为这些参数提供值的话,这些参数就使用默认值。这个功能借助于默认参数值完成。你可以在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值。 注意,默认参数值应该是一个参数。更加准确的说,默认参数值应该是不可变的——这会在后面的章节中做详细解释。从现在开始,请记住这一点。 使用默认参数值 例7.5 使用默认参数值 #!
Scala 函数 Scala 可以为函数参数指定默认参数值,使用了默认参数,你在调用函数的过程中可以不需要传递参数,这时函数就会调用它的默认参数值,如果传递了参数,则传递值会取代默认值。实例如下: object Test { def main(args: Array[String]) { println( "返回值 : " + addInt() ); } def
正如JPA所要求的,类应该有一个默认的(非参数)构造函数,以便在从数据库检索对象时实例化它们。 在Kotlin中,属性在主构造函数内声明非常方便,如下例所示: 但是当非arg构造函数被声明为次要构造函数时,它需要传递主构造函数的值,因此它们需要一些有效的值,如下所示: 如果属性具有比和更复杂的类型,并且它们是不可为空的,那么为它们提供值看起来是非常糟糕的,特别是当主构造函数和块中有很多代码,并且当
问题内容: 我希望JavaScript函数具有我设置了默认值的可选参数,如果未定义值,则使用该参数(如果传递值,则将其忽略)。在Ruby中,您可以这样操作: 这在JavaScript中有效吗? 问题答案: 从ES6 / ES2015开始,默认参数在语言规范中。 正常工作。 如果 未 传递 任何值 或 未定义, 则默认函数参数允许使用默认值初始化形式参数。 您还可以通过解构来模拟默认的命名参数: 预
问题内容: 按照JPA的要求,类应具有默认的(非arg)构造函数,以在从数据库中检索对象时实例化这些对象。 在Kotlin中,可以很方便地在主构造函数中声明属性,如以下示例所示: 但是,当将非arg构造函数声明为辅助构造函数时,它要求传递主要构造函数的值,因此需要一些有效值,例如: 如果属性的类型比just更复杂,并且它们不能为null,那么为它们提供值看起来是非常糟糕的,尤其是当主要构造函数和块