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