从ListModel转换为Java 7中的DefaultListModel

Sam*_*Sam 1 java

如何将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
Run Code Online (Sandbox Code Playgroud)

我试过以下,

DefaultListModel<E> portalListModel = (DefaultListModel) portalList.getModel();
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,这是一个愚蠢的问题,但我完全被这个新的通用事物所困扰!请帮帮我!

Mik*_*ike 5

Java集合的工作方式是您可以使用Collection类型对象来存储一大堆对象.在引入Generics之前,您可以将任何对象存储在Collection中,然后在想要从集合中获取这些对象时必须执行强制转换.

List myList = new ArrayList();
myList.add("string");
myList.add(new MyValueClass(42, "identifying string"));
Run Code Online (Sandbox Code Playgroud)

这是完全可以接受的代码.如果你想迭代对象,你可以这样做:

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.
}
Run Code Online (Sandbox Code Playgroud)

使用Java 1.5,Generics在插入列表时提供编译时类型检查.所以现在,如果你声明myList为a List<String>,当你尝试向MyValueClassList 添加一个类型的对象时,上面的第一个代码块将在编译时失败.

在Java 1.7中,DefaultListModel是通用的.因此,当您调用时portalList.getModel(),您将返回DefaultListModel包含特定类型对象的对象(这就是<E>它;它是实际对象类型的占位符.)在上面的List<String>示例中,String是替换E.

因此,如果您的portalList对象的model成员是DefaultListModel包含一堆对象的成员MyValueClass,那么您的声明应如下所示:

DefaultListModel<MyValueClass> portalListModel = portalList.getModel();
Run Code Online (Sandbox Code Playgroud)

请参阅DefaultListModel API文档.