2016-05-19 2 views
-3
public class AccountManager { 

    priavte Map accountTotals = new HashMap(); 
    private int retirementFund; 

    public int getbalance(String accountName) { 
     **Integer Total = (Integer) accountTotals.get(accountName); 
     if(total == Null) 
      total = Integer.valueof(0); 
     return total.intValue;** 
    } 

    public void setBalance (string accountName, int amount) { 
     accountTotals.put(accountname, Integer.valueof(amount)); 
    } 
} 

я могу заменить выделенный код с двумя из них, чтобы выполнить его:распаковка не в состоянии понять

1:

int Total = accountTotals.get(accountName); 
if(total == null) 
    total = 0; 
return total; 

2:

Integer total = accountTotals.get(accountName); 
if(total == null) 
    total = 0; 
return total; 

3:

return accountTotals.get(accountName); 

Может кто-нибудь сказать мне, какие из двух перечисленных выше я должен заменить выделенным кодом? И почему ?

Спасибо!

+0

Почему бы вам не попробовать все три варианта с помощью компилятора Java и посмотреть, какая работа? – hexafraction

+0

Да, я постараюсь сделать это – Sri

+1

Какое это имеет отношение к дженерикам? –

ответ

0

int не допускается равным нулю. Целое число допускается равным нулю. Доступ из HashMap может возвращать нуль, так что значение не может быть ква ...

1

Ваш код должен выглядеть следующим образом:

public class AccountManager { 
    private Map<String, Integer> accountTotals = new HashMap<>(); 
    private int retirementFund; 

    public int getbalance(String accountName) { 
     Integer total = accountTotals.get(accountName); 
     if(total == null) { 
      return 0; 
     } 
     return total; 
    } 

    public void setBalance (String accountName, int amount) { 
     accountTotals.put(accountName, amount); 
    } 
} 

Помимо многих опечаток в исходном коде, здесь есть некоторые объяснения:

  • Использовать общую версию карты: Map<String, Integer>. Это даст вам типы безопасности при отправке или получении данных с карты.
  • К сожалению, дженерики Java не работают с примитивными типами. Поэтому карта должна содержать вставные Integer экземпляров.
  • С другой стороны, это позволяет использовать условие total == null, чтобы проверить, находится ли это значение на карте или нет. Вот почему вам нужно использовать Integer total = accountTotals.get(accountName) вместо int total = accountTotals.get(accountName);. Если значения нет, последний попытается удалить из get() результат, чтобы сохранить его в переменной int. Но поскольку null не может быть распакован, вы получите NullPointerException.
  • При возвращении вы можете просто написать return total;. Несмотря на то, что total имеет тип Integer, а тип результата - int, Java автоматически удалит значение. Конечно, вы можете сделать это, только если total не null.

Поскольку ваш вопрос был, вероятно, направлена ​​на преобразование между Integer и int, вы можете видеть, что Java делает преобразование в обоих направлениях автоматически (бокс: accountTotals.put(accountName, amount), распаковка: return total). Вам просто нужно иметь в виду, что только Integer может содержать null, и если вы попытаетесь удалить ненужное значение null, вы получите NullPointerException.

Смежные вопросы