它是使用 javaargs 而不是在 Java 中重载的标准方法吗?

Is it standard way to use javaargs instead of overloading in Java?

这是一种标准的编码方式还是有其他替代方法?我想了一会儿我写的代码。终于放弃了,想和你们确认一下。

这是我遇到的情况。

private String functionNameXYZ(String a,String b) {
   //Logic goes here
}
private String functionNameXYZ(String a,String b,String c) {
   //Same logic goes here , Nothing much difference because of String c
}

所以我 出于相同目的应该跳过两个函数,我创建了一个函数,如下所示。

private String functionNameXYZ(String a, String b,String... c){
   return performlogic(a,b,(c.lenght!=0)? c[0]:null);
}
private String performlogic(String a,String b, String c) {
   //logic , return "string"
}

哪种编码方式是标准的?是将逻辑分离到新方法中而不是重复[第二种情况]还是其他方式?如果您找到更好的方法,请提出建议?

如果您仅有的两个有效选项是两个 String 参数和三个 String 参数,那么使用可变参数有点矫枉过正,更糟糕的是 - 它令人困惑,因为它意味着您还可以传递五个或十个或无数个论点。相反,您可以做一些更简单的事情:

private String functionNameXYZ(String a, String b) {
   functionNameXYZ(a, b, null);
}

private String functionNameXYZ(String a, String b, String c) {
   // One place for the logic
}

你的第一个场景很好,除了你可能想把函数中的任何大量公共代码放在一个单独的函数中(或者更容易地,让参数较少的函数调用参数较多的函数) .

重载没问题,但是在两个地方重写相同的代码并不是一个好的做法。

此外,由于 Java 没有默认参数,我不太热衷于使用 public 方法的参数 nullable,即使在 Java 文档中注明。超载是要走的路。

我想你需要问自己一个问题:什么输入是合法的?

如果您的程序应该处理 2...n 个参数,那么绝对使用可变参数。但是,如果函数的合法输入恰好是 2 个或 3 个参数,那么您应该使用模式:

private String functionNameXYZ(String a, String b) {
   // logic of function
}

private String functionNameXYZ(String a, String b, String c) {
   // place the logic for handling 'c' input then call
   functionNameXYZ(a, b);
}

或者,正如另一位发帖人提到的那样:

private String functionNameXYZ(String a, String b) {
   functionNameXYZ(a, b, null);
}

private String functionNameXYZ(String a, String b, String c) {
   // One place for the logic
}

就我个人而言,我更喜欢第一种方法,因为它清楚地将用于处理 'c' 参数的逻辑与其他逻辑分开。这通常在您可以分离该逻辑时使用,例如在构造函数中。但是,当无法轻易理清逻辑时,请采用第二种方法。