Получение данных из другого класса в Java - PullRequest
0 голосов
/ 01 ноября 2011
public class Item {

    /**
    * Instance variables for this class
    */

    private String itemName;
    private int itemQuantity;

    /**
    * Contructor for this class
    */

    public Item (String itemName, int itemQuantity) {
        this.itemName = itemName;
        this.itemQuantity = itemQuantity;
    }
    //setter and getter methods
    public String getItemName () { 
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    public int getItemQuantity () {
        return itemQuantity;
    }
    public void setItemQuantity(int itemQuantity) {
        this.itemQuantity = itemQuantity;
    }
}

Хорошо ... У меня уже есть класс для предмета. Теперь я должен написать класс CartItem. Ниже приводится описание:

class CartItem{ 
/*
Objects of this class are used to hold items that the shopper purchases in the super market. 
There are two attributes in this class, an item (an object created from the Item class) and a quantity (the number of that item that the shopper purchases). You have to write these two attributes. Note that one of the two will have a user defined data type. 
*/

}

public class CartItem {
    private Item item; //item from the item class
    private int itemQuantity; //quantity how much shopper buys

    public CartItem(Item itemName, int itemQuantity) {
        this.getItem();
        this.getQuantity();
    }


    public Item getItem() {
        return item;
    }
    public void setItem(Item item) {
        this.item = item;
    }

    public int getQuantity() {
        return itemQuantity;
    }
    public void setQuantity(int quantity) {
        this.itemQuantity = itemQuantity;
    }
}

Просто интересно, если это правильно.

Ответы [ 3 ]

2 голосов
/ 01 ноября 2011

Нет, это не правильно.Посмотрите на ваш конструктор:

public CartItem(Item itemName, int itemQuantity) {
    this.getItem();
    this.getQuantity();
}

Здесь вы вызываете getters и полностью игнорируете значения, переданные вызывающей стороной. Я не думаю, что вы хотите это сделать ..Подумайте о том, что нужно сделать конструктору, чтобы заполнить вновь созданный объект ...

(Вы также должны рассмотреть , сделав эти классы неизменяемыми, но это немного другой вопрос.)

0 голосов
/ 01 ноября 2011

Нет, это не так.

Конструктор для CartItem просто вызывает this.getItem() и this.getQuantity(). Это просто вызовет методы, которые, очевидно, будут возвращать ноль, поскольку атрибуты никогда не инициализируются. Должно быть:

public CartItem(Item itemName, int itemQuantity) {
    this.item = itemName;
    this.itemQuantity = itemQUantity;
}

Другая проблема заключается в том, что вы добавляете методы получения и установки для всех полей, даже не зная, необходимы ли эти методы. Старайтесь поддерживать неизменность и предоставляйте сеттеры только в случае крайней необходимости. Я не буду объяснять все преимущества неизменности, потому что было бы слишком рано, учитывая то, что вы уже знаете. Но хорошее правило: не добавляйте метод в класс, если он не используется.

0 голосов
/ 01 ноября 2011

Мало вещей.

1 человек может делать покупки более одного Item, поэтому иметь List из Item
2 Конструктор не правильный, который должен быть

public CartItem(Item itemName, int itemQuantity) {
        this.item = itemName;
        this.itemQuantity = itemQuantity;

    }
...