<Swing Dev> JDK 9 RFR of JDK-8054360: Refine generification of javax.swing
Joe Darcy
joe.darcy at oracle.com
Tue Aug 12 22:51:20 UTC 2014
*ping*
Any other comments here?
Thanks,
-Joe
On 08/07/2014 07:20 PM, Joe Darcy wrote:
> Hello,
>
> Please review my changes for
>
> JDK-8054360: Refine generification of javax.swing h
> http://cr.openjdk.java.net/~darcy/8054360.3/
>
> Full patch below.
>
> This resolves many of the source incompatibility exemplars Jan Lahoda
> found in a corpus of programs using swing.
>
> A few comments on the changes.
>
> It seems many existing implementations of the TreeNode interface have
> a covariant override of the old raw
>
> Enumeration children();
>
> method which returns an enumeration of the specific TreeNode
> implementation type. The revised generification of
>
> Enumeration<? extends TreeNode> children();
>
> allows those existing implementations to still compile. This is a
> lower-impact way of allowing those types to still compile compared to
> trying to add a type variable to TreeNode.
>
> After some expert generics advice from Dan Smith, I but together a
> different generification of
>
> src/share/classes/javax/swing/table/DefaultTableModel.java
>
> which has better source compatibility. Quoting from the changes:
>
> 73 @SuppressWarnings("rawtypes")
> 74 protected Vector<Vector> dataVector;
> 75
> 76 /** The <code>Vector</code> of column identifiers. */
> 77 @SuppressWarnings("rawtypes")
> 78 protected Vector columnIdentifiers;
> 79 // Unfortunately, for greater source compatibility the
> inner-most
> 80 // Vector in the two fields above is being left raw. The
> Vector is
> 81 // read as well as written so using Vector<?> is not suitable
> and
> 82 // using Vector<Object> (without adding copying of input
> Vectors),
> 83 // would disallow existing code that used, say, a Vector<String>
> 84 // as an input parameter.
>
> The setter methods used for these fields are changes to have
> parameters of type Vector<?> and Vector<? extends Vector>, respectively.
>
> The type Vector<? extends Vector> is the most general type which
> captures the implicit constraint of the dataVector field: it is a
> Vector of other Vectors. (It would probably be possible to update
> dataVector to the somewhat more general Vector<List>, but that would
> require changes to the code in other methods of the class.)
>
> The changes in
> src/share/classes/sun/tools/jconsole/inspector/TableSorter.java change
> the code back to how it was before the swing generification changes
> went in based on the changes to DefaultTableModel.
>
> Once the exact generification is settled, I'll file the internal ccc
> paperwork.
>
> Early feedback on using this revised generification on swing code is
> welcome!
>
> Thanks,
>
> -Joe
>
More information about the swing-dev
mailing list