如何只用2个参数调用3参数的函数?

时间:2017-03-14 13:59:50

标签: java

我在 Java 采访中遇到一个问题,他问我: 如何调用函数说add(int a, int b, boolean value)只传递两个参数,如add(int a, int b)。 我不知道同样的事情,并问他一些提示然后他回答我:

去阅读以下概念

Integer a;

int a;

现在我的问题是提示如何与问题相关,我们如何才能实现相同的目标。

提前致谢

5 个答案:

答案 0 :(得分:1)

你无法打破方法签名,你需要重载方法 并减少/删除你不需要/想要的参数

答案 1 :(得分:1)

我认为你可以使用wrapper and boxing concepts

来做到这一点

例如,在您的情况下,您可以创建另一个方法来接收两个参数,然后执行以下操作:

add(int a, int b){
    Boolean c = null;
    add(a, b, c);
}

或者使用int值:

add(int a, boolean c){
    Integer b = null;
    add(a, b, c);
}

通过这种方式,您可以将原语更改为其包装类...但是,在调用中它将抛出异常...

原因是Integer b = null自动取消装箱到int。要取消装箱,JVM将在int Integer.intValue()值上调用null。要纠正此异常,解决方案是防止任何取消装箱,因此该方法需要使用包装器类。这是方法:

add(Integer a, Integer b, Boolean c){
    //...
}

由于参数不是原始参数,因此无需尝试取消装箱null值。但是在方法内部需要像任何Object参数一样。在使用任何null值之前,您仍需要进行一些nullable检查。因此,如果a + b为空,则您不能期望b返回一些内容。

答案 2 :(得分:0)

java中不存在默认参数,但您可以通过重载轻松地重现这一点。

public int add(int a, int b){
    return this.add(a, b, true);
}

public int add(int a, int b, boolean value){
    return value ? ( a + b) : (a - b);
}

此布尔值为“optionnal”,默认值为true

所以这可以像:

add(1, 2);           // 3
add(1, 2, false);    // -1

这似乎是相同的方法,但这实际上是一个重载,一个调用另一个。

答案 3 :(得分:0)

您可以使用Varargs,但您需要更改布尔值的位置。

private void add(boolean a, int ... b){

}

您可以像这样调用它

add(true, 1, 2);
add(false, 1);
add(true);

varargs是可选的,数据类型是该类型的数组。

如果需要使用不同的类型,可以使用对象数组。对象... b。

或者您可以直接定义数组

private void add(int[] b, boolean a){

}

在这种情况下,你总是有两个参数。

a = {1, 2};
add(a, true);

答案 4 :(得分:0)

似乎就是这种情况:Java optional parameters

第四篇文章解释了你可以做的每个解决方案。