我在 Java 采访中遇到一个问题,他问我:
如何调用函数说add(int a, int b, boolean value)
只传递两个参数,如add(int a, int b)
。
我不知道同样的事情,并问他一些提示然后他回答我:
去阅读以下概念
Integer a;
int a;
现在我的问题是提示如何与问题相关,我们如何才能实现相同的目标。
提前致谢
答案 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
第四篇文章解释了你可以做的每个解决方案。