Java ArrayList Downcasting - PullRequest
       23

Java ArrayList Downcasting

0 голосов
/ 15 апреля 2020

Итак, я работал над проектом, в котором Мне нужен список для заполнения его новыми объектами дочернего класса.

Я сделал это традиционным методом какой один ArrayList будет заполнен типом дочернего класса. Но для того, чтобы сделать код короче и эффективнее, я собираюсь уменьшить ArrayList, чтобы иметь один ArrayList родительского класса, который имеет оба дочерние классы объекта внутри него. Возможно ли это?

Это родительский класс вещей

 package Model;

public class Things {
    protected String id;
    protected String name;
    protected double price;
    protected int stock;
    protected int bought;

public Things() {}

public Things(String id, String name, double price, int stock) {
    this.id = id;
    this.price = price;
    this.name = name;
    this.stock = stock;
}

public String getId() {
    return id;
}

public String getName() {
    return name;
}

public double getPrice() {
    return price;
}

public int getStock() {
    return stock;
}

public void minusStock(int bought) {
    this.stock = stock - bought;
 }
}

, и это его дочерний класс Handphone и Vouchers

дочерний класс Handphone

package Model;

public class Handphone extends Things {
    private String color;

    public Handphone(String id, String name, double price, int stock, String color) {
        super(id, name, price, stock);
        this.color = color;
    }

    public String getColor() {
        return color;
    }
}

Ваучер дочернего класса

package Model;

public class Voucher extends Things {
    private double tax;

    public Voucher(String id, String name, double price, int stock, double tax) {
        super(id, name, price, stock);
        this.tax = tax;
    }

    public double getTax() {
        return tax;
    }

    public double getsellingPrice() {
        return (price + (price*tax));
    }
}

Таким образом, чтобы упомянуть, что интерфейс главного меню будет в другом пакете, я положил import Model.* на нем. Будет ли он также включен в пакет меню, если я скажу это так?

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Вы можете поместить Handphone и Voucher в List<Things> (возможно, Thing будет более подходящим именем?), Нет необходимости в приведении:

List<Things> things = new ArrayList<>();
things.add(new Handphone("id", "name", 1, 1, "color"));

Однако, если Вы получаете доступ к списку и действительно должны знать, является ли это Handphone или Voucher, вам придется понизить объект.

Этот тип приведения может быть признаком недостатка проекта, поэтому осторожно продумайте свое решение.

0 голосов
/ 15 апреля 2020

Если вы включите поле с protected getter, содержащим сам класс, в ваш родительский класс, тогда можно будет узнать во время выполнения, будь то наушники, ваучер или SomethingElse.

Убедитесь, что, как подсказывает @Maglinex, вы не видите недостаток дизайна.

...