Java 可接受一个或两个参数但不超过两个的函数

Java 可接受一个或两个参数但不超过两个的函数,java,methods,Java,Methods,我正在尝试创建一个方法,该方法应接受最小一个和最大两个参数第一个参数是必须的,第二个是可选的 我试着跟着你 myFunction(String param1, String param2){ } 但在这种情况下,两个参数都需要传递,我不希望这样 myFunction(String... params){ } 在这种情况下,它也可以接受两个以上的参数,这也是我不想要的 myFunction(String... params){ } 有人能告诉我这是不是用java完成的吗 重载方法: myF

我正在尝试创建一个方法,该方法应接受最小一个和最大两个参数第一个参数是必须的,第二个是可选的

我试着跟着你

myFunction(String param1, String param2){

}
但在这种情况下,两个参数都需要传递,我不希望这样

myFunction(String... params){
}
在这种情况下,它也可以接受两个以上的参数,这也是我不想要的

myFunction(String... params){
}
有人能告诉我这是不是用java完成的吗

重载方法:

myFunction(String param1){
  ...
}

myFunction(String param1, String param2){
  ...
}
考虑使用第二个参数的默认值使“一个参数版本”调用另一个版本以简化操作。

重载方法:

myFunction(String param1){
  ...
}

myFunction(String param1, String param2){
  ...
}

考虑让“一个参数版本”调用另一个版本,并为第二个参数设置一个默认值,以简化事情。

Maby使用重载方法会更好吗? 创建两个名称相同但属性号不同的方法

myFunction(param1)
myFunction(para1,param2)

此外,您还可以从抽象级别移动相同的逻辑,并在myFunction()上使用它们

使用重载方法可能会更好吗? 创建两个名称相同但属性号不同的方法

myFunction(param1)
myFunction(para1,param2)

此外,您可以从抽象级别移动相同的逻辑,并在myFunction()

中使用它们。在这种情况下,由于两个可能的参数都是字符串,因此您可以重构方法以接受字符串数组,然后在方法内部进行验证,例如

void myMethod (String... params) throws IllegalArgumentException {
    if (params == null || params.length < 1 ||
        params.length > 2 || params[0] == null) {
        throw new IllegalArgumentException("wrong no. of arguments");
    }
}
void myMethod(字符串…参数)抛出IllegalArgumentException{
如果(params==null | | params.length<1||
params.length>2 | | params[0]==null){
抛出新的IllegalArgumentException(“错误数量的参数”);
}
}

在这种情况下,由于两个可能的参数都是字符串,您可以重构方法以接受字符串数组,然后在方法内部进行验证,例如

void myMethod (String... params) throws IllegalArgumentException {
    if (params == null || params.length < 1 ||
        params.length > 2 || params[0] == null) {
        throw new IllegalArgumentException("wrong no. of arguments");
    }
}
void myMethod(字符串…参数)抛出IllegalArgumentException{
如果(params==null | | params.length<1||
params.length>2 | | params[0]==null){
抛出新的IllegalArgumentException(“错误数量的参数”);
}
}

通过重载方法,您可以通过以下方式实现这一点:

void foo(String param1, String param2) {
    // your logic here
}

void foo(String param1) {
    foo(param1, DEFAULT_VALUE_FOR_PARAM2);
}

有关Java中可选参数的完整概述,请参阅。

通过重载方法,您可以通过以下方式实现这一点:

void foo(String param1, String param2) {
    // your logic here
}

void foo(String param1) {
    foo(param1, DEFAULT_VALUE_FOR_PARAM2);
}

有关Java中可选参数的完整概述,请参阅。

可以这样做,但是在这种情况下,我需要复制我的整个逻辑。@MehrajMalik:在大多数情况下,您只需使用默认值使单参数重载调用双参数重载。不需要重复。如果需要知道调用了哪个重载,请创建前两个调用的第三个私有方法,该方法有三个参数:
param1
param2
param2UserSupplied
(最后一个是布尔值)或类似参数。这是可以做到的,但是在这种情况下,我需要复制我的整个逻辑。@MehrajMalik:在大多数情况下,您只需使用默认值使单参数重载调用双参数重载。不需要重复。如果您需要知道调用了哪个重载,请创建前两个调用的第三个私有方法,该方法有三个参数:
param1
param2
param2UserSupplied
(最后一个是布尔值)或类似参数。您可以使用带有两个方法和不同参数的函数重载来实现这种行为。@SandeepKokate:老实说,我不确定哪种方式算是“不容易”…我认为在java中不容易。您可以使用带有两个方法和不同参数的函数重载来实现这种类型的行为。@SandeepKokate:老实说,我不确定哪种方式算是“不容易”。。。