Sobes.tech
Junior

Чӣ қадар бехатар аст, ки ба унсури дар 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 оварда расонад.