2013-10-06 51 views
2

我想實現一個購物車,並且我有一些Integer類的問題。代碼如下:Java運算符+未定義類型整數,整數

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表示「operator + undefined for type(s)Integer,int」。但我讀過關於拆箱的內容,我認爲我會沒事的。

沒關係,我試着去解決這個問題,所以我試着在nrOfProds上調用intValue()。這一次,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

我已考慮您的指示並使用ShoppingCart類 – Hame

相關問題