如何设置默认方法参数值?

是否可以在Java中设置默认方法参数值?

示例:如果有方法

public int doSomething(int arg1, int arg2) { //some logic here return 0; } 

是否可以修改给定的方法,以便能够使用和不使用参数调用它?

例:

 doSomething(param1, param2); doSomething(); 

谢谢!

您可以通过方法重载来完成此操作。

 public int doSomething(int arg1, int arg2) { return 0; } public int doSomething() { return doSomething(defaultValue0, defaultValue1); } 

通过创建此无参数方法,您允许用户使用您在无参数方法的实现中提供的默认参数来调用parameterfull方法。 这称为重载方法。

如果您的参数类型相同,则可以使用varargs:

 public int something(int... args) { int a = 0; int b = 0; if (args.length > 0) { a = args[0]; } if (args.length > 1) { b = args[1]; } return a + b } 

但是这样你就失去了各个参数的语义,或者

有一个方法重载,它将调用中继到参数化版本

 public int something() { return something(1, 2); } 

或者如果该方法是某种初始化过程的一部分,您可以使用构建器模式:

 class FoodBuilder { int saltAmount; int meatAmount; FoodBuilder setSaltAmount(int saltAmount) { this.saltAmount = saltAmount; return this; } FoodBuilder setMeatAmount(int meatAmount) { this.meatAmount = meatAmount; return this; } Food build() { return new Food(saltAmount, meatAmount); } } Food f = new FoodBuilder().setSaltAmount(10).build(); Food f2 = new FoodBuilder().setSaltAmount(10).setMeatAmount(5).build(); 

然后使用Food对象

 int doSomething(Food f) { return f.getSaltAmount() + f.getMeatAmount(); } 

构建器模式允许您稍后添加/删除参数,并且不需要为它们创建新的重载方法。

不,Java不支持C ++等默认参数。 您需要定义一个不同的方法:

 public int doSomething() { return doSomething(value1, value2); } 

您不能为C#(我相信)允许的参数声明默认值,但您可以简单地创建一个重载。

 public int doSomething(int arg1, int arg2) { //some logic here return 0; } //overload supplies default values of 1 and 2 public int doSomething() { return doSomething(1, 2); } 

如果你打算做这样的事情,请为你的代码工作的其他人做一个忙,并确保你在Javadoc评论中提到你正在使用的默认值是什么!

Java中的默认值是不可能的。 我处理这个问题的首选方法是重载方法,这样你就可以得到类似的东西:

 public class MyClass { public int doSomething(int arg1, int arg2) { ... } public int doSomething() { return doSomething(, ); } } 

您可以使用不同的参数重载该方法:

 public int doSomething(int arg1, int arg2) { //some logic here return 0; } public int doSomething( { doSomething(0,0) } 

希望我不会误解这个文档 ,但是如果你使用Java 1.8,理论上你可以通过在你实现的接口中定义默认方法(“defender方法”)的工作实现来完成这样的事情。

 interface DoInterface { void doNothing(); public default void remove() { throw new UnsupportedOperationException("remove"); } public default int doSomething( int arg1, int arg2) { val = arg1 + arg2 * arg1; log( "Value is: " + val ); return val; } } class DoIt extends DoInterface { DoIt() { log("Called DoIt constructor."); } public int doSomething() { int val = doSomething( 0, 100 ); return val; } } 

然后,以任何一种方式调用它:

 DoIt d = new DoIt(); d.doSomething(); d.soSomething( 5, 45 );