Чӣ қадар бехатар аст, ки ба унсури дар HashMap тавассути калиди ки вуҷуд надорад, дастрасӣ пайдо кунед?
sobes.tech AI
Ҷавоб аз AI
Ҳангоми дастрасӣ ба унсури HashMap бо калиди нодор, усули get() null бармегардонад. Ин дар маънои бехатар аст, ки хатогии IndexOutOfBoundsException ба вуҷуд намеояд, мисли он ки бо массив ё рӯйхат дар дастрасӣ ба индекс нодуруст.
Аммо, агар коди баъдӣ тахмин кунад, ки натиҷа гирифташуда null нахоҳад буд (масалан, дар ҳангоми фаро гирифтани усулҳо дар ин объект), ин метавонад ба NullPointerException оварда расонад.
Барои кор кардан бо бехатарӣ, тавсия дода мешавад:
-
Натиҷаро пеш аз истифодаи он ба
nullсанҷед:// Намунаи санҷиши null Object value = hashMap.get(nonExistentKey); if (value != null) { // Истифодаи value } else { // Ҳал кардани ҳолати калиди нодор } -
Методҳоро истифода баред, ки арзиши пешфарз ё рафторе, ки бехатартар аст, пешниҳод мекунанд, масалан
getOrDefault()(аз Java 8):// Намунаи истифодаи getOrDefault Object value = hashMap.getOrDefault(nonExistentKey, defaultValue); -
Қуросро
Optional(бо Java 8) истифода баред, агар ин мувофиқ бошад, то ки эҳтимолияти нодории арзишро равшантар нишон диҳед:// Намунаи истифодаи Optional Optional<Object> optionalValue = Optional.ofNullable(hashMap.get(nonExistentKey)); if (optionalValue.isPresent()) { // Истифодаи арзиш: optionalValue.get() }
Ин гуна, дастрасии мустақим бо get() бехатар аст, аммо кор бо арзиши null бе санҷиши мувофиқ метавонад ба NullPointerException оварда расонад.