And*_*tag 2 java swing jcombobox java-7
我无法在java7中删除一个新的类型安全警告.
我定义了以下JCombobox对象
private JComboBox<Integer> combobox_current_year;
Run Code Online (Sandbox Code Playgroud)
和构造函数
combobox_current_year = new JComboBox(options.getList_years().toArray());
Run Code Online (Sandbox Code Playgroud)
Java 7现在给我以下警告:
类型安全:JComboBox类型的表达式需要未经检查的转换以符合JComboBox
将代码更改为
combobox_current_year = new JComboBox<Integer>((Integer[]) options.getList_years().toArray());
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
线程"AWT-EventQueue-0"中的异常java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为[Ljava.lang.Integer; 在jamm.gui.FinanzmanagerGui.mainWindow(FinanzmanagerGui.java:123)在jamm.StartJamm $ 1.run(StartJamm.java:43)在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)在java.awt中.EventQueue.dispatchEventImpl(EventQueue.java:705)在java.awt.EventQueue.access $ 000(EventQueue.java:101)在java.awt.EventQueue中$ 3.run(EventQueue.java:666)在java.awt.EventQueue中$ 3 .RUN(EventQueue.java:664)在java.security.AccessController.doPrivileged(本机方法)在java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76)在java.awt.EventQueue.dispatchEvent(EventQueue.java: 675)java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)at java. awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)在java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
试着做
combobox_current_year = new JComboBox<Integer>(options.getList_years().toArray(new Integer[0]));
Run Code Online (Sandbox Code Playgroud)
如果你想要一个特定的数组类型,那么集合框架的toArray总是会返回一个Object []
问题是该toArray()方法返回的类型对象Object[]是一个完全不同的类型Integer[](因此使得转换失败).您必须传入一个不同类型的数组toArray(…)来解决这个问题.从列表中获取数组的最有效方法是:
List<Integer> tmp = options.getList_years();
combobox_current_year = new JComboBox<Integer>(
tmp.toArray(new Integer[tmp.size()]));
Run Code Online (Sandbox Code Playgroud)
我使用临时变量来保存列表,因为我想预先调整数组大小,以便可以将值复制到其中.传入较短的数组(例如,长度为0)也可以工作,但会导致额外的分配.(你可以通过将长度为零的数组保存在private static字段中来使其工作;它实际上是不可变的,因此你可以分享它而不会产生任何不良后果.但我更喜欢预先调整大小,因为这样会在类级别上留下更少的混乱.)
| 归档时间: |
|
| 查看次数: |
3661 次 |
| 最近记录: |