3 回答
TA貢獻1811條經驗 獲得超5個贊
我寧愿InputMessage從方法返回一個新的,而不是將其作為參數傳遞。假設您有InputMessage帶有 2 個參數的構造函數,它將如下所示:
return Optional.ofNullable(result)
.map(map -> new InputMessage(map.get("param1"), map.get("description")))
.orElse(new InputMessage("id", "param1"));TA貢獻1831條經驗 獲得超9個贊
關于什么:
private void myMethod(final InputMessage inputMessage, final String id) {
final Map<String, String> result = null;
try {
result = jdbcTemplate.query(
QUERY /* sql */,
ROW_EXTRACTOR /* ResultSetExtractor */,
id /* args */
);
} catch (final Exception e) {
logger.error(...);
}
if (result != null)
setParams(inputMessage, result.get("param1"), result.get("description"))
else
setParams(inputMessage, param1, id);
}
public void setParams(final InputMessage inputMessage, String param1, String param2) {
inputMessage.setParam1(param1);
inputMessage.setId(param2);
}
TA貢獻1833條經驗 獲得超4個贊
在查詢數據庫結果時,您應該使用 Java 中的 Optional 類以避免 NullPointerExceptions。(https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html這里是一些進一步的文檔)。
例如,下面的一段代碼:
final Map<String, String> result =
jdbcTemplate.query(
QUERY /* sql */,
ROW_EXTRACTOR /* ResultSetExtractor */,
id /* args */
);
不應該返回 null 而是返回一個Optional<Map<String,String>>,那么您將能夠以這樣的功能方式編寫代碼:
result.ifPresent(res -> {
inputMessage.setParam1(res.get("param1"));
inputMessage.setId(res.get("description")); // Insert description
});
這也將幫助您去掉這里不需要的 try-catch 語句。
此外,將數據獲取功能分離到 DAO 層并在服務層中對獲取的對象進行操作也是一種很好的做法。請在此處找到更多相關文檔:https ://www.baeldung.com/java-dao-pattern
添加回答
舉報
