如何使这种方法更通用

Java8Musician:

我在弄清楚有关Java继承的内容时遇到了一些麻烦。我以为这很简单,但这让我很困惑。

我有这个超类。

public class MyItem {

    private String barCode;
    private String price;

    public String getBarCode() {
        return barCode;
    }

    public void setBarCode(String barCode) {
        this.barCode = barCode;
    }

    public String getPrice() {
        return price;
    }

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

}

我有这两个子类

public class PromotionalItem extends MyItem {

    private String promotion;

    public String setPromotion(String promotion) {
        this.promotion = promotion;
    }

    public void getPromotion() {
        this.promotion = promotion;
    }

}

public class SellableItem extends MyItem {

    private String quantity;

    public String setQuantity(String quantity) {
        this.quantity = quantity;
    }

    public void getQuantity() {
        this.quantity = quantity;
    }

}

现在我有一种方法想要通用化,我认为像这样的方法可以工作...

public void processItem(MyItem item){
    if(item.getClass().isAssignableFrom(PromotionalItem.class)){
        processPromotionalItem((PromotionalItem)item);
    }
    else{
        processSellableItem((SellableItem)item);
    }
}

但是,当我尝试将这些项目强制转换为它们各自的子类时,我得到了ClassCastException。我认为这样的事情是可行的。我想念什么吗?这样的替代方法是什么?

本少校:

该代码看起来像一个反模式。我要做的是在MyItem中有一个名为process的抽象方法,并且两个子类都实现了该方法:

public class MyItem {

    private String barCode;
    private String price;

    public String getBarCode() {
        return barCode;
    }

    public void setBarCode(String barCode) {
        this.barCode = barCode;
    }

    public String getPrice() {
        return price;
    }

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

    public abstract void process();

}

现在,如果您有一个子类,则必须执行该过程方法,然后可以直接调用该过程方法,而不必检查它是什么类。

public void processItem(MyItem item){
    item.process();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章