This patch helps writing more stable code.
Eg. instead of writing something like:
- DefaultListModel model = new DefaultListModel();
- model.addElement("test");
- JList list = new JList(model);
- ...
- String value = (String) list.getSelectedValue(); // unchecked cast
- Foo foo = (Foo) list.getSelectedValue(); // cast will fail at runtime
with this patch you can write now:
- DefaultListModel<String> model = new DefaultListModel<String>();
- model.addElement("test");
- JList<String> list = new JList<String>(model);
- ...
- String value = list.getSelectedValue();
- Foo foo = list.getSelectedValue(); // compile time error
Note that:
JList.getSelectedValues(): Object[] has been deprecated and replaced with:
JList.getSelectedValuesList(): List<E>
Have a look at the jtreg tests to see more examples.
If you're interested in the future of Swing, join the discussions in the OpenJDK Swing mailing list.
Congrats, this is a real step forward! Does this also mean that the ListCellRenderer interface will have a generic type?
ReplyDeleteYes, ListCellRenderer has a generic type parameter, too. See:
ReplyDeletehttp://hg.openjdk.java.net/jdk7/swing/jdk/file/7bcb1864f424/src/share/classes/javax/swing/ListCellRenderer.java
Super good :D
ReplyDeleteThat's the parameter I use.
ReplyDelete