Список Список дочерних объектов, имеющих один и тот же суперкласс - PullRequest
0 голосов
/ 17 мая 2011

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

public class Element implements Serializable {

    private static final long serialVersionUID = 10121L;

    private String value;

    public Element(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "Element [value=" + value + "]";
    }   
}

Один из подклассов:

public class DateElement extends Element {

    private static final long serialVersionUID = 10122L;

    private DateTime date;

    public DateElement(String value, DateTime date) {
        super(value);
        this.date = date;
    }

    public DateTime getDate() {
        return date;
    }

    public void setDate(DateTime date) {
        this.date = date;
    }

    @Override
    public String toString() {
        return "DateElement [date=" + date + ", value=" + getValue() + "]";
    }   
}

Я создаю экземпляр списка как:

this.userMonitorMap = new ArrayList<List<? extends Element>>(0);

Добавление списка DateElement в userMonitorMap как:

List<DateElement> dateElements = getDateElements();
userMonitorMap.add(dateElements);

До этой части у меня нет проблем. Но у населения ListView есть проблема, фрагмент кода:

        ListView row = new ListView("row", userMonitorMap) {

            @Override
            protected void populateItem(ListItem rowItem) {
                List<? extends Element> columnMap = (List<? extends Element>) rowItem;
                ListView column = new ListView("column", columnMap) {

                    @Override
                    protected void populateItem(ListItem columnItem) {
                        Element element = (Element) columnItem; //The compile time error is here
                    }
                };
                rowItem.add(column);
            }
        };

Я прокомментировал проблему в своем коде. Как мне этого добиться? Какие изменения мне нужны?

IDE затмения красным цветом отмечена эта строка и сообщение об ошибке: Невозможно привести от ListItem к элементу

Спасибо и всего наилучшего.

1 Ответ

2 голосов
/ 17 мая 2011

ListItem не является объектом в самом списке, он содержит модель, которая содержит ваш объект.Вы должны использовать:

Model<Element> elementModel = columnItem.getModel();

или

Element element = columnItem.getModelObject();

Взгляните на эти примеры

Ваш код должен читать:

ListView row = new ListView ("row", userMonitorMap) {

        @Override
        protected void populateItem(ListItem rowItem) {
            List<? extends Element> columnMap = rowItem.getModelObject();
            ListView column = new ListView("column", columnMap) {

                @Override
                protected void populateItem(ListItem columnItem) {
                    Element element = columnItem.getModelObject();
                }
            };
            rowItem.add(column);
        }
    };
...