在Java7中从ListModel转换为DefaultListModel

在Java7中从ListModel转换为DefaultListModel,java,Java,如何将ListModel强制转换为DefaultListModel??!我执行以下操作并收到此错误消息 DefaultListModel portalListModel = (DefaultListModel) portalList.getModel(); C:\Documents and Settings\...\myfile.java:728: warning: [rawtypes] found raw type: DefaultListModel DefaultListModel

如何将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 portalListModel=(DefaultListModel)portalList.getModel();
C:\Documents and Settings\…\myfile.java:728:警告:[rawtypes]找到原始类型:DefaultListModel
DefaultListModel portalListModel=(DefaultListModel)portalList.getModel();
泛型类DefaultListModel缺少类型参数
其中E是一个类型变量:
扩展类DefaultListModel中声明的对象
我试了以下方法

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

我有一种感觉,这是一个愚蠢的问题,但我完全混淆了这个新的通用的东西!请帮帮我

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

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.
}
在Java1.5中,泛型在插入列表时提供编译时类型检查。因此,现在,如果您将
myList
声明为
列表
,那么当您尝试将类型为
MyValueClass
的对象添加到列表中时,上面的第一个代码块将在编译时失败

在Java1.7中,
DefaultListModel
是泛化的。因此,当您调用
portalList.getModel()
时,您将返回一个
DefaultListModel
,其中包含特定类型的对象(即
是什么;它是实际对象类型的占位符)。在上面的
列表
示例中,
字符串
E
的替代

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

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

请参阅。

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

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.
}
在Java1.5中,泛型在插入列表时提供编译时类型检查。因此,现在,如果您将
myList
声明为
列表
,那么当您尝试将类型为
MyValueClass
的对象添加到列表中时,上面的第一个代码块将在编译时失败

在Java1.7中,
DefaultListModel
是泛化的。因此,当您调用
portalList.getModel()
时,您将返回一个
DefaultListModel
,其中包含特定类型的对象(即
是什么;它是实际对象类型的占位符)。在上面的
列表
示例中,
字符串
E
的替代

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

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

请参阅。

列表模型中的数据类型(哪个类)?如果不知道确切的类型参数,可以使用
。尝试
DefaultListModelPortalListModel=(DefaultListModel)portalList.getModel()列表模型中的数据类型(哪个类)?如果不知道确切的类型参数,可以使用
。尝试
DefaultListModelPortalListModel=(DefaultListModel)portalList.getModel()myList
的基本(Java-1.5之前的样式)
List
对象,它包含两个对象。
myList
中的第一个对象属于类
String
myList
中的第二个对象属于类
MyValueClass
。因此,当您迭代
myList
中的值以取出它们时,迭代器中的代码特别需要
String
对象。第一次通过循环时,它会很好地工作。但是,第二次,它将抓取
MyValueClass
对象,尝试将其强制转换为
String
,并抛出
ClassCastException
。请有人解释一下//注意:在他的回答中?当然。因此,在我的示例(第一个代码块)中,我们有一个名为
myList
的基本(Java-1.5之前的样式)
List
对象,它包含两个对象。
myList
中的第一个对象属于类
String
myList
中的第二个对象属于类
MyValueClass
。因此,当您迭代
myList
中的值以取出它们时,迭代器中的代码特别需要
String
对象。第一次通过循环时,它会很好地工作。但是,第二次,它将抓取
MyValueClass
对象,尝试将其强制转换为
String
,并抛出
ClassCastException