Ik ben eindelijk eens echt begonnen met Java 5, en dus ook generics (op het werk zitten we nog op 1.4 en dat blijft ook nog wel even zo).
Nu heb ik generics al snel door gekregen, maar bij het omzetten van wat oude code merkte ik iets op: er zitten geen generics in Swing of AWT.
Ok, voor sommige components is het (vrijwel) onmogelijk, zoals een JTable waar elke kolom van een andere class kan zijn. Maar ik heb toch al snel wat components kunnen vinden die weinig problemen zouden mogen hebben als ze generics zouden gebruiken.
JList
Een JList kan bevat objecten, via zijn ListModel. Dit kan dus prima generic gemaakt worden:
JList<E>
ListModel<E> - het type moet exact gelijk zijn want de JList get en set waarden van zijn model. Voor get moet het model subclasses van E hebben, voor set superclasses.
ListCellRenderer<? extends E>
JComboBox
Een JComboBox lijkt heel veel op een JList (ComboBoxModel is zelfs een subinterface van ListModel), dus ook hier:
JComboBox<E>
ComboBoxModel<E>
ListCellRenderer<? extends E>
Verder kun je zoiets ook doen met een JTabbedPane<T extends Component>, en in een wat complexere manier met JTree. Maar nu vraag ik me af waarom Sun dit niet gedaan heeft? Ze hebben generics in het collection framework intensief doorgevoerd om invalide class casts op compile niveau af te vangen, en vervolgens laten ze in de user interface packages de gebruiker alsnog aan zijn lot over waar dit niet overal nodig zou zijn.
Iemand een idee?
Nu heb ik generics al snel door gekregen, maar bij het omzetten van wat oude code merkte ik iets op: er zitten geen generics in Swing of AWT.
Ok, voor sommige components is het (vrijwel) onmogelijk, zoals een JTable waar elke kolom van een andere class kan zijn. Maar ik heb toch al snel wat components kunnen vinden die weinig problemen zouden mogen hebben als ze generics zouden gebruiken.
JList
Een JList kan bevat objecten, via zijn ListModel. Dit kan dus prima generic gemaakt worden:
JList<E>
ListModel<E> - het type moet exact gelijk zijn want de JList get en set waarden van zijn model. Voor get moet het model subclasses van E hebben, voor set superclasses.
ListCellRenderer<? extends E>
JComboBox
Een JComboBox lijkt heel veel op een JList (ComboBoxModel is zelfs een subinterface van ListModel), dus ook hier:
JComboBox<E>
ComboBoxModel<E>
ListCellRenderer<? extends E>
Verder kun je zoiets ook doen met een JTabbedPane<T extends Component>, en in een wat complexere manier met JTree. Maar nu vraag ik me af waarom Sun dit niet gedaan heeft? Ze hebben generics in het collection framework intensief doorgevoerd om invalide class casts op compile niveau af te vangen, en vervolgens laten ze in de user interface packages de gebruiker alsnog aan zijn lot over waar dit niet overal nodig zou zijn.
Iemand een idee?
More than meets the eye
There is no I in TEAM... but there is ME
system specs