簡體   English   中英

在Java 7中從ListModel轉換為DefaultListModel

[英]Casting from a ListModel into a DefaultListModel in Java 7

如何將ListModel強制轉換為DefaultListModel ?! 我執行以下操作,並收到此錯誤消息,

DefaultListModel portalListModel = (DefaultListModel) portalList.getModel();

C:\Documents and Settings\...\myfile.java:728: warning: [rawtypes] found raw type: DefaultListModel
    DefaultListModel portalListModel = (DefaultListModel) portalList.getModel();
missing type arguments for generic class DefaultListModel<E>
where E is a type-variable:
E extends Object declared in class DefaultListModel

我嘗試了以下方法

DefaultListModel<E> portalListModel = (DefaultListModel) portalList.getModel();

我覺得這是一個愚蠢的問題,但是我完全被這新的通用事物所迷惑! 請幫幫我!

Java集合的工作方式是可以使用集合類型的對象存儲一大堆對象。 在引入泛型之前,您可以將任何對象存儲在Collection中,然后當您想從集合中刪除這些Object時必須執行強制轉換。

List myList = new ArrayList();
myList.add("string");
myList.add(new MyValueClass(42, "identifying string"));

那是完全可以接受的代碼。 如果要遍歷對象,可以這樣進行:

Iterator it = myList.iterator();
while (it.hasNext()) {
    String str = (String) it.next();  // NOTE: This will work the first time, but throw a ClassCastException when it gets to the second item.
}

在Java 1.5中,泛型在插入列表時提供了編譯時類型檢查。 因此,現在,如果將myList聲明為List<String> ,則當您嘗試向列表中添加MyValueClass類型的對象時,上面的第一段代碼將在編譯時失敗。

在Java 1.7中, DefaultListModel是通用的。 因此,當您調用portalList.getModel() ,您將取回一個DefaultListModel ,其中包含某種類型的對象( <E>是它的類型;它是實際對象類型的占位符。)在上面的List<String>例如, StringE的替代。

因此,如果您的portalList對象的model成員是DefaultListModel ,其中包含一堆MyValueClass對象,則您的聲明應類似於:

DefaultListModel<MyValueClass> portalListModel = portalList.getModel();

請參閱DefaultListModel API文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM