2011-05-17 66 views
0

我想設計一個模型,其中我有一個具有相同超類的子對象列表的列表。此型號將是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); 

Upt這部分我沒有問題。但是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); 
      } 
     }; 

我已經在我的代碼註釋的問題。我怎樣才能做到這一點?我需要什麼變化?

Eclipse IDE的紅色標記該行和錯誤消息是:不能從列表項轉換爲元素

感謝和問候。

+2

發佈編譯器錯誤可能有幫助 – Mat 2011-05-17 10:01:57

+0

@Mat我編輯了我的文章。 – 2011-05-17 10:08:08

回答

2

ListItem不是列表本身的對象,它包含一個包含您的對象的模型。您應該使用:

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

Element element = columnItem.getModelObject(); 

看看這些examples

您的代碼應閱讀:

的ListView行=新的ListView( 「行」,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); 
     } 
    }; 
+0

謝謝。我的錯。該模型正在工作。謝謝。 – 2011-05-17 10:24:00