Получение данных из другого класса в Java

#java #class #getter

#java #класс #средство получения

Вопрос:

 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;
    }
}
 

Хорошо .. у меня уже есть класс для item . Теперь мне нужно написать класс 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;
    }
}
 

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

Комментарии:

1. Есть ли где-то скрытый актуальный вопрос? Помогите мне определить это, пожалуйста.

2. Если вы спросите меня, высокоуровневый дизайн, похоже, отключен. Почему у вас есть количество как в Item классе, так и в CartItem классе? Вы должны оставить количество CartItem классу и сосредоточиться только на атрибутах отдельного продукта для Item класса, например, цена, описание и т.д.

3. да, я пытаюсь понять основную причину этого, основанную на дизайне лектора.. он уже был разработан в первую очередь, и все спецификации уже были предоставлены нам, и мы должны строго следовать ему.

4. Прочитав дизайн учителя, атрибут quantity в Item фактически является доступным количеством (на складе) для этого элемента.

Ответ №1:

Нет, это неверно. Посмотрите на свой конструктор:

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

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

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

Ответ №2:

Несколько вещей.

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

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

    }
 

Комментарии:

1. Список должен быть в объекте Cart , и это будет List<CartItem> .

Ответ №3:

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

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

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

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