我有一个名为DataItem的超类,它有多个孩子,而这些孩子也有孩子。我动态设置对象类型,但最终类型引用是DataItem。这是我用来确定类类型的代码:

private DataItem getDataItemUponType(DataSection parent,Element el) {
    String style = getItemStyle(parent,el);
    if(style!=null) {
        if(style.equals("DUZ")) {
            return new DataItemPlain();
        } else if(style.equals("TVY")) {
            return new DataItemPaired();
        } else if(style.equals("TVA")) {
            return new DataItem();
        } else if(style.equals("FRM")) {
            return new DataItemForm();
        } else if(style.equals("IMG")) {
            return new DataItemImage();
        } else if(style.equals("CLN")) {
            return new DataItemCalendar();
        } else if(style.equals("BTN")) {
            return new DataItemButton();
        } else if(style.equals("ALT")) {
            return new DataItemSubRibbon();
        }
    } else {
        // At least return a DataItem.
        return new DataItem();
    }
    return new DataItem();
}


然后我用它来设置我的对象:

DataItem dataItem = getDataItemUponType(parent,element);

然后我想从DataItem的子类型调用。我怎么做?

注意:我需要使用DataItem,所以使其抽象化对我而言不起作用。

最佳答案

您试图打破抽象的概念:使用DataItem应该没问题。它应该具有您实际要调用的所有方法。这是主要思想:

Have an interface to describe the communication and hide the implementation.


尝试重新考虑您的设计。

07-24 19:10
查看更多