java设置默认参数_关于java:如何设置默认方法参数值?

本问题已经有最佳答案,请猛点这里访问。

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

例子:如果有方法

public int doSomething(int arg1, int arg2)

{

//some logic here

return 0;

}

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

例子:

doSomething(param1, param2);

doSomething();

谢谢!

基本上和这个一样:"Java支持默认的参数值吗?",stackoverflow.com/questions/997482/…

您可以通过方法重载来实现这一点。

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();

然后处理食物对象

int doSomething(Food f) {

return f.getSaltAmount() + f.getMeatAmount();

}

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

+1用于提及构建器模式。

+1对于使用varargs,我很少看到开发人员使用它。

不。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注释中提到您使用的默认值是什么!

C不允许使用可选或默认参数。这样做的语言是例如C++和Python。

在Java中默认值是不可能的。我处理这一问题的首选方法是重载该方法,这样您可能会遇到如下情况:

public class MyClass

{

public int doSomething(int arg1, int arg2)

{

...

}

public int doSomething()

{

return doSomething(, );

}

}

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

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 );

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

public int doSomething(int arg1, int arg2)

{

//some logic here

return 0;

}

public int doSomething(

{

doSomething(0,0)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值