2010-09-21 2 views
1

Итак, у меня есть этот класс:Как вызвать метод из другого класса в Java

public class Product { 
private String name, id, info ; 
private int quantity; 

public Product(String newName, String newID, String newInfo, Integer newQuantity){ 
    setName(newName); 
    setID(newID); 
    setPrice(newInfo); 
    setQuantity(newQuantity);} 

public void setName(String name) { 
    this.name = name; } 

public void setID(String id) { 
    this.id = id; } 

public void setPrice(String info) { 
    this.info = info; } 

public void setQuantity(Integer quantity) { 
    this.quantity = quantity; } 

public String getID() { 
    return id; } 

public String getName() { 
    return name; } 

public String getInfo() { 
    return info; } 

public int getQuantity() { 
    return quantity; } 

В другом классе я это:

public class Invoice implements Group<Product> { 
    private HashMap<String, Product> prod = new HashMap<String, Product>(); 

    public Invoice(){ } 
    public void addProd(Product a) { 

     prod.put(??getID()??,new Product(??)); 
    } 
} 

Если эти данные были получены пользователем, а не меня , Я бы использовал метод getID()? Итак, в моем счете-фактуре класса, как я использую метод getID(), так что я могу использовать его в параметре для моего значения ключа в HashMap? Также есть способ добавить 3 значения (name info quan) в hashmap без создания нового класса?

ответ

4

Я вижу, что вы получаете Product объект с ref "a" в качестве параметра для вашего метода addProd.

И вы можете получить id, просто используя a.getID(). Он должен выглядеть так:

public void addProd(Product a) { 

     prod.put(a.getID(),a); 
    } 

я не понял вторую часть вашего вопроса .. Я думаю, что у вас уже есть 3 значения в вашем объекте продукта и вы поместите объект продукта на карту, Так почему же вам требуется другой путь ?

0

Ваш класс Продукт не компилируется, потому что у вас есть имя Item в вашем конструкторе. Имя конструктора должно совпадать с именем класса. Поэтому измените это на Product. То же самое относится к Invoice vs ShoppingCart. Имена конструктора и класса должны совпадать.

В соответствии с вашим комментарием вы хотели бы добавить четыре значения продукта на карту. Ключ является одним из значений самого продукта. Попробуйте это:

Product p = new Product(name, id, info, quantity); 
cart.addProd(p); 

... 

public void addProd(Product p) { 
    prod.put(p.getId(), p); 
} 

Карты могут отображать только одно значение для одного ключа, так что вы должны иметь какой-то контейнер для значений, которые вы хотите, чтобы собирать в одно значение. Это может быть объект (Продукт), или вы можете использовать коллекцию (например, List). Я настоятельно рекомендую первый.

+0

нет точно. что делает эта программа, так это то, что я попросил пользователя команду, скажем, он дает мне данные для элемента с идентификатором, именем, информацией, quan. то класс Invoice добавит эти 4 вещи в HashMap с ключом id. Я действительно не знаю, что должно быть в prod.put() Я предполагал, что я бы использовал getID(), чтобы получить вход пользователя. Мой плохой опечаток – Jack

+0

О группа - это просто интерфейс с методом addProd. Действительно ли мне нужен конструктор Invoice в счете-фактуре? – Jack

+0

Пока у вас нет другого конструктора, конструктор по умолчанию является необязательным. – Synesso

0

Для вашего вопроса о том, как разместить 3 значения на вашей карте, я не думаю, что вы можете поместить 3 значения в один ключ без создания класса. Альтернативой является сохранение Map<String, List<String>> при условии, что ваши 3 значения имеют тип String или Map<String, Map<String, String>>.

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