2013-10-06 2 views
2

장바구니를 구현하려고하는데 Integer 클래스에 몇 가지 문제가 있습니다.java 연산자 + 유형에 대해 정의되지 않았습니다. 정수, 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 
} 
.... 
} 

이클립스는 말한다 "연산자 + 유형 (들) 정수, INT에 대한 정의되지 않은"이 코드입니다. 그러나 나는 언 박싱에 대해 읽었으며 나는 괜찮을 것이라고 생각했다.

신경 쓰지 마라. 나는이 문제를 해결하려고 노력했다. 그래서 nrOfProds에서 intValue()를 호출 해 보았다. 이번에 Eclipse는 "intValue() 메소드는 Integer 유형에 대해 정의되지 않았습니다."라고했습니다. 어째서? Integer 유형에 대해 정의됩니다.

거기에 s also a problem with with Integer.valueOf(1). It가 다시 정의되지 않았습니다.

무엇이 문제입니까?

+4

TreeMap을 확장해서는 안됩니다. 클래스 내에서 * 사용해야합니다. 그렇지 않으면 누구나'shoppingCart.put (product, 67)'을 호출하고'addToCart()'메소드를 무시할 수 있습니다. –

+0

ShoppingCart 클래스에서 TreeMap을 확장 하시겠습니까? addToCart 메소드를 사용하고 있어도, TreeMap의 모든 메소드는 여전히 public이며, 클래스의 불변 값 (의미가없는 값 삽입)을 재정의하기 위해 직접 호출 할 수 있습니다. 쇼핑 맵 클래스의 일반 (비공개) 필드가지도를 만드는 것이 좋습니다. ShoppingCart에 메소드를 추가하여 필요에 따라 맵에 추가 할 수 있습니다. – Boann

답변

14

클래스보다 우선하며 클래스의 유형 매개 변수로 Integer을 선언했습니다. 클래스 이름 다음에 꺽쇠 괄호로 묶은 값은 타입 매개 변수라고 선언하는 동안 값을 지정합니다.

변경 클래스 선언은 :

public class ShoppingCart extends TreeMap<Product, Integer> 

이상적으로, 당신은 TreeMap을 확장하지 않도록해야합니다. 오히려 그것은 내 수업에 instance 필드로 가지고 있습니다.

+0

감사합니다. 나는 이것을 짧은 시간 안에 대답으로 받아 들일 것이다. – Hame

+0

@Hame 확실히. 또한 필드를 확장하는 대신 TreeMap 를 필드로 사용하는 것을 고려해야합니다. –

+0

나는 귀하의 표시를 고려하여 ShoppingCart 클래스의 TreeMap을 사용했습니다 – Hame

관련 문제