Java 方法重写来控制行为(类似 python 可选参数)

标签 java

下面使用方法重载来控制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/

相关文章:

java - 如何将本地日期时间转换为格林威治标准时间?

java - com.microsoft.sqlserver.jdbc.SQLServerException : Invalid column name 'xxx'

java - JDK7 和原生组件的焦点问题

java - ControlsFx 对话框无法在不同计算机上打开

java - 如何从我的 Android 设备访问本地 REST API?

java - 从表中选择行 - Java Selenium

java - 在服务器上运行 IRC-Bot?

java - 如何在 Java 中使用 BufferedReader 读取文件结尾(EOF)?

java - Java 和 Python 通过 stdout 进行通信

java - 在 BufferedImage 上绘图。重画()