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

时间:2015-10-15 17:47:34

标签: java overloading

它是一种标准的编码方式还是其他任何替代方案?我想了一下我写的代码。终于放弃了,并想与你们一起检查。

这是我的情景。

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"
}

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

3 个答案:

答案 0 :(得分:6)

如果你只有两个有效选项是两个String参数和三个String参数,那么使用varargs会有点过分,更糟糕的是 - 它会让人感到困惑,因为这意味着你也可以通过五个或十个或大量的论点。相反,你可以做一些更简单的事情:

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
}

答案 1 :(得分:1)

你的第一个场景很好,除非你想在函数中使用任何大量的公共代码并将它放在一个单独的函数中(或者更容易,使用较少params的函数调用更多的函数)。 / p>

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

此外,由于Java没有默认参数,我不太热衷于使用 public 方法可以为空的 >,即使在JavaDocs上注明。重载是最佳选择。

答案 2 :(得分:1)

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

如果你的程序应该处理2 ... n个参数,那么绝对应该使用varargs。但是,如果函数的合法输入正好是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'参数和其他参数的逻辑。这可以在你可以分离逻辑时使用,例如在构造函数中。但是,当逻辑不能轻易解开时,请采用第二种方法。