下面使用方法重载来控制requestWork()
行为的方式合理吗?
通常,在 python 中,我会为 passId 和 paperId 设置可选参数。
def requestWork(start, end, passId=None, paperId=None):
if passId is not None:
# do passId stuff
else:
# do paperId stuff
不确定 Java 相当于上面的内容
public static int doFlag = true;
public static String PASS_ID = "passID";
public static String PAPER_ID_ONE = "paperIdOne";
public static String PAPER_ID_TWO = "paperIdTwo";
public int getSomething(DateTime start, DateTime end) {
if (doFlag) {
return requestWorkPassId(start, end, PASS_ID);
} else {
return requestWork(start, end PAPER_ID_ONE) + requestWork(start, end, PAPER_ID_TWO);
}
}
public int requestWorkPassId(DateTime start, DateTime end, String passId) {
return requestWork(start, end, passId, "");
}
public int requestWork(DateTime start, DateTime end, String paperId) {
return requestWork(start, end, "", paperId);
}
public int requestWork(DateTime start, DateTime end, passId, paperId) {
int output;
if (!String.isNullOrEmpty(paperId) {
output = SOME_EXTERNAL_API(paperId);
} else {
output = SOME_EXTERNAL_API_TWO(passId);
}
//common check for output
return output;
}
最佳答案
虽然没有与您发布的 Python 代码完全等效的 Java,但您仍然可以在一定程度上实现它。
在 Java 中完成此类操作的通常方法如下:
public int requestWorkPassId(DateTime start, DateTime end) {
return requestWork(start, end, "");
}
public int requestWork(DateTime start, DateTime end, String passId) {
return requestWork(start, end, passId, "");
}
public int requestWork(DateTime start, DateTime end, String passId, String paperId) {
int output;
if (!String.isNullOrEmpty(paperId) {
output = SOME_EXTERNAL_API(paperId);
} else {
output = SOME_EXTERNAL_API_TWO(passId);
}
//common check for output
return output;
}
<!-- language: java -->
[假设 d1 和 d2 是 DateTime 对象] 工作原理非常简单,始终根据参数数量将函数调用传递给下一个函数,这是 Java 中的常见做法: 通过调用 requestWork(d1, d2),您可以使用空字符串作为 passId 和 paperId。 通过调用 requestWork(d1, d2, "foo"),您可以使用“foo”作为 passId,使用空字符串作为 paperId。 通过调用 requestWork(d1, d2, "", "foo"),您将使用空字符串作为 passId,使用“foo”作为 paperId(我猜这就是 Python 击败 Java 的地方)。 通过调用 requestWork(d1, d2, "foo", "bar"),您只需使用 passId="foo"和 paperId="bar"调用包含实际代码的函数即可。
我希望这对您的项目有所帮助并祝您好运, 来自德国的问候!
关于Java 方法重写来控制行为(类似 python 可选参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54488339/