Java 是否支持默认的参数值?
本文于2137天之前发表,文中内容可能已经过时。
在 c++ 中,常见到如下的方法定义(param3 默认为 false):
1 | void MyParameterizedFunction(String param1, int param2, bool param3=false); |
那在 java 中,是否也支持这样的定义方式?
答案是否定的,不过我们可以通过多种方式处理这种参数默认值的情况。
创建者模式
使用创建者模式,你可以设定部分参数是有默认值,部分参数是可选的。如:
1 | Student s1 = new StudentBuilder().name("Eli").buildStudent(); |
方法(构造函数)重载
如:
1 | void foo(String a, Integer b) { |
构造函数重载,对于参数比较少的情况下,比较适合;当参数相对多的时候,可以考虑使用静态工厂方法,或添加一个参数辅助对象。
如果是常规方法重载,可以考虑使用 参数辅助对象,或者重命名多种情况(比如说,有多个开银行卡的重载方法,可以根据需要重命名为 开交行卡,开招行卡 等多种方法)。
null 的传递
当有多个默认参数时,可以考虑传递 null,当参数为 null 时,将参数设为 默认值。如:
1 | void foo(String a, Integer b, Integer c) { |
多参数方式
当有多个参数,且某些参数可以忽略不设置的情况下,可以考虑使用多参数方式。
- 可选的参数类型的一致
1 | void foo(String a, Integer... b) { |
- 可选参数类型不一致
1 | void foo(String a, Object... b) { |
使用 Map 作为方法中的参数
当参数很多,且大部分参数都会使用默认值的情况,可以使用 Map 作为方法中的参数。
1 | void foo(Map<String, Object> parameters) { |
stackoverflow原址:https://stackoverflow.com/questions/997482/does-java-support-default-parameter-values