繁体   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