它是使用 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' 参数的逻辑与其他逻辑分开。这通常在您可以分离该逻辑时使用,例如在构造函数中。但是,当无法轻易理清逻辑时,请采用第二种方法。
这是一种标准的编码方式还是有其他替代方法?我想了一会儿我写的代码。终于放弃了,想和你们确认一下。
这是我遇到的情况。
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' 参数的逻辑与其他逻辑分开。这通常在您可以分离该逻辑时使用,例如在构造函数中。但是,当无法轻易理清逻辑时,请采用第二种方法。