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

Java 如何用2个参数调用3个参数的函数?,java,Java,我在Java的采访中遇到一个问题,他问我: 如何调用一个函数,比如说add(inta,intb,boolean value),只传递两个参数,比如add(inta,intb)。 我不知道这一点,问他一些提示,然后他回答我: 去读下面的概念 Integer a; int a; 现在我的问题是,这个暗示与这个问题有什么关系,我们如何才能做到这一点 提前感谢您不能破坏方法签名,您将需要重载该方法 并减少/删除您不需要/想要的参数如果无法破坏方法签名,则需要重载方法 减少/删除java中不需要/不想

我在Java的采访中遇到一个问题,他问我: 如何调用一个函数,比如说
add(inta,intb,boolean value)
,只传递两个参数,比如
add(inta,intb)
。 我不知道这一点,问他一些提示,然后他回答我:

去读下面的概念

Integer a;

int a;

现在我的问题是,这个暗示与这个问题有什么关系,我们如何才能做到这一点


提前感谢

您不能破坏方法签名,您将需要重载该方法
并减少/删除您不需要/想要的参数

如果无法破坏方法签名,则需要重载方法
减少/删除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

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

默认参数在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

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

我认为您可以使用

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

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);
}
通过这种方式,您可以将原语更改为其包装器类。。。但是,在调用中,它将抛出和异常

原因是将
整数b=null
自动解装箱为
int
。要取消装箱,JVM将对
null
值调用
int Integer.intValue()
。要更正此异常,解决方案是防止任何拆箱,因此该方法需要使用包装器类。方法如下:

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

由于参数不是原语,因此无需尝试取消绑定
null
值。但这在方法内部是需要的,就像任何对象参数一样。在使用任何
nullable
值之前,您仍然需要执行一些
null
检查。因此,如果
b
为空,您不能期望
a+b
返回某些内容。

我认为您可以使用

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

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);
}
通过这种方式,您可以将原语更改为其包装器类。。。但是,在调用中,它将抛出和异常

原因是将
整数b=null
自动解装箱为
int
。要取消装箱,JVM将对
null
值调用
int Integer.intValue()
。要更正此异常,解决方案是防止任何拆箱,因此该方法需要使用包装器类。方法如下:

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

由于参数不是原语,因此无需尝试取消绑定
null
值。但这在方法内部是需要的,就像任何对象参数一样。在使用任何
nullable
值之前,您仍然需要执行一些
null
检查。因此,如果
b
为空,则不能期望
a+b
返回某些内容。

可以使用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){

}
在这种情况下,您总是有2个参数

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

可以使用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){

}
在这种情况下,您总是有2个参数

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

似乎是这样的:


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

似乎是这样的:


第四篇文章解释了您可以执行的每个解决方案。

如果不提供调用三个参数重载的两个参数重载(例如,使用
true
作为第三个参数的值),您就不能。“提示与问题的关系如何”绝对不知道。你给出的暗示毫无意义。他问了一些不可能的问题,暗示他希望得到一个创造性的答案。。。。我将回答“我的实际解决方案是使用C++代替java。(默认参数)如果你雇佣我,我会改变你的公司使用C++。”你可以空洞添加(对象…参数):@ javalver:为什么C++,使用KTILN而不提供两个参数重载,调用三个参数超载。(例如使用<代码>真的<代码>作为第三个参数的值),你不能。“提示与问题相关”绝对没有概念。你给出的提示没有意义。他问了一些不可能的事情,暗示他希望有创造性的答案。我会回答:“我的实际解决方案是用C++代替java。如果你雇佣我,我会改变你的公司使用C++。“你可以使用ValueAdd(object…参数):@)javalver:为什么C++,使用KotlinThis将在每个调用上抛出一个NPE,因为JVM将试图调用<代码>布尔-BooLangValueEnter()/Cuffe >以获得空实例上的原始形式。(与整数相同)。嗯……可能一点用处都没有……它可能是一个坏例子;)不要,只需使用包装器类型以方法签名结束即可;)具有explanation@AxelH如果你能帮我即兴表演,我将不胜感激