我撰寫了一個不允許重復字符的應用程式。我的代碼作業正常,但是聲納說“而不是 containsKey 使用 computeIfAbsent”。我怎樣才能克服聲納警告?
我的代碼如下:
if (promoRequest.getCharset() != null) {
Map<Character, Integer> map = new HashMap<>();
for (char charsetCharacter : promoRequest.getCharset().toCharArray()) {
if (map.containsKey(charsetCharacter)) {
throw new BadRequestException(Constants.INCLUDE_MUST_NOT_BE_DUPLICATED);
}
map.put(charsetCharacter, 1);
}
}
我已經解決了問題
for (char charsetCharacter : promoRequest.getCharset().toCharArray()) {
if (!map.containsKey(charsetCharacter)) {
map.put(charsetCharacter, 1);
} else {
throw new BadRequestException(Constants.CHARSET_CHARACTER_INCLUDE_MUST_NOT_BE_DUPLICATED);
}
uj5u.com熱心網友回復:
由于您需要保留例外,因此使用computeIfAbsent. 參考檔案說明如下:
如果指定的鍵尚未與值關聯(或映射為 null),則嘗試使用給定的映射函式計算其值并將其輸入此映射,除非為 null。
這意味著您定義的任何映射函式只會在映射沒有鍵時才被呼叫。因為您只是想在密鑰已經可用時拋出例外,所以使用computeIfAbsent是無稽之談。
話雖如此,只需保留您的代碼并忽略聲納警告。請記住,聲納分析是一種靜態分析,在您的代碼中尋找模式,但這并不總是適用于您在代碼中嘗試執行的任何操作。
如果例外不是強制性的,那么您可以做一些更簡單的事情:
if (promoRequest.getCharset() != null) {
Map<Character, Integer> map = new HashMap<>();
for (char charsetCharacter : promoRequest.getCharset().toCharArray()) {
map.putIfAbsent(charsetCharacter, 1);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/334515.html
上一篇:如何告訴Swagger顯示其路徑上具有/api/*的任何服務檔案
下一篇:重試Reactor中的特定例外
