简化代码并避免instanceOf和null检查

Der*_*usA -1 java null object instanceof optional

我想简化代码(例如使用Optionals)

private String formatValue(Object value) {
    if (value == null) {
        return null;
    } else if (value instanceof Date) {
        return MyUtils.formatDate((Date)value, Constant.DATE_FORMAT_YYYYMMDD_HHMMSS);
    }

    return value.toString();
}
Run Code Online (Sandbox Code Playgroud)

值可以是:nullStringDate

T.J*_*der 6

我会通过重载来处理它:

private String formatValue(String value) {
    return value;
}
private String formatValue(Date value) {
    return MyUtils.formatDate(value, Constant.DATE_FORMAT_YYYYMMDD_HHMMSS);
}
Run Code Online (Sandbox Code Playgroud)

...并修复所有通过它的代码null

如果您确实需要处理null,则:

private String formatValue(String value) {
    return value;
}
private String formatValue(Date value) {
    return value == null ? null : MyUtils.formatDate(value, Constant.DATE_FORMAT_YYYYMMDD_HHMMSS);
}
Run Code Online (Sandbox Code Playgroud)

以上工作提供了您在编译时就知道要传递的内容的类型,通常就是这种情况。但是,如果必须处理在编译时已知的唯一类型是的可能性,则Object还可以添加一个Object版本:

private string formatValue(Object value) {
    if (value instanceof Date) {
        return this.formatValue((Date)value);
    }
    return value == null ? null : value.toString();
}
Run Code Online (Sandbox Code Playgroud)

这开始感觉像是更多的代码,但是它使正常的路径(已知类型的路径)直接进入适当的方法,并且仅当您处理的是动态的东西时才提供Object

或者你也可以具备Object版本。它没有更少的支票,但对我来说似乎更简单,更清晰。