2013-10-06 5 views
2

Я пытаюсь реализовать корзину покупок, и у меня есть некоторые проблемы с классом Integer. Это код:java operator + не определен для типа (ов) Integer, int

public class ShoppingCart<Product, Integer> extends TreeMap<Product, Integer> { 

void addToCart(Product product) { 
    if (this.containsKey(product)) { 
     Integer nrOfProds = this.get(product); 
     this.put(product, nrOfProds + 1); //the problem is here 
    } else 
     this.put(product, Integer.valueOf(1)); //and also here 
} 
.... 
} 

Eclipse, говорит "оператор + не определен для типа (ов) Integer, междунар". Но я читал о распаковке, и я думал, что все будет в порядке.

Ничего, я попытался это сделать, поэтому я попытался вызвать intValue() на nrOfProds. На этот раз Eclipse сказал, что «метод intValue() не определен для типа Integer». Как так? Он определен для типа Integer.

s also a problem with with Integer.valueOf(1). It s нестандартный способ, снова.

Что не так с этим?

+4

Вы не должны расширять TreeMap. Вы должны * использовать * его внутри своего класса. В противном случае любой пользователь сможет вызвать 'shoppingCart.put (product, 67)' и обойти метод 'addToCart()'. –

+0

Вы действительно хотите, чтобы ваш класс ShoppingCart расширил TreeMap? Хотя у вас есть метод addToCart, все методы TreeMap остаются общедоступными и могут быть вызваны непосредственно, чтобы переопределить инварианты вашего класса (вставляя значения, которые не имеют смысла). Наверное, было бы лучше, если бы ваша карта была обычным (частным) полем класса ShoppingCart. Вы можете добавить методы в ShoppingCart, которые при необходимости привязаны к карте. – Boann

ответ

14

Вы указали Integer как параметр типа вашего класса, который переопределяет класс java.lang.Integer. Значения, которые вы указываете после имени класса в угловых скобках при объявлении его, являются параметрами типа.

Изменить объявление класса:

public class ShoppingCart extends TreeMap<Product, Integer> 

В идеале, вы должны избегать расширения TreeMap. Скорее, это как поле instance в моем классе.

+0

Спасибо. Я приму это как ответ за короткое время. – Hame

+0

@ Хим, конечно. Кроме того, вам следует рассмотреть возможность использования 'TreeMap ' как поля, а не расширения. –

+0

Я рассмотрел ваше указание и использовал TreeMap внутри класса ShoppingCart – Hame

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