[OpenJDK 2D-Dev] JDK 9 RFR of JDK-8042864 : Fix raw and unchecked warnings in javax.print
Phil Race
philip.race at oracle.com
Mon May 19 20:08:48 UTC 2014
OK now. I wouldn't necessarily agree the generification was poor, and it
was a choice
made by someone else ..
-phil.
On 5/19/2014 12:49 PM, Joe Darcy wrote:
> Revised webev at
>
> http://cr.openjdk.java.net/~darcy/8042864.2
>
> Comments below.
>
> On 05/19/2014 12:14 PM, Phil Race wrote:
>> On 5/19/2014 11:54 AM, Joe Darcy wrote:
>>>>
>>>>
>>>> http://cr.openjdk.java.net/~darcy/8042864.0/src/share/classes/javax/print/attribute/standard/DialogTypeSelection.java.sdiff.html
>>>>
>>>>
>>>> < 113 public final Class getCategory() {
>>>>
>>>> > 113 public final Class<DialogTypeSelection> getCategory() {
>>>>
>>>>
>>>> getCategory() is a super-class method ..
>>>>
>>>> So this seems wrong to me and I think|it should look like this ..|
>>>>
>>>> http://docs.oracle.com/javase/8/docs/api/javax/print/attribute/Attribute.html
>>>>
>>>> |Class
>>>> <http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html><?
>>>> extends Attribute
>>>> <http://docs.oracle.com/javase/8/docs/api/javax/print/attribute/Attribute.html>>|
>>>> |getCategory
>>>> <http://docs.oracle.com/javase/8/docs/api/javax/print/attribute/Attribute.html#getCategory-->()
>>>>
>>>>
>>>> |
>>>
>>> Part of the generics language feature was covariant overrides, that
>>> is, when a subtype overrides a methods from a supertype, the return
>>> type of the subtype method can be a more-specific type.
>>>
>>> That is the case here; DialogTypeSelection is a subtype of "?
>>> extends Attribute" so the getCategory method in DialogTypeSelection
>>> is a covariant override of the superclass method. Moreover, since
>>> the superclass uses the "? extends Attribute" wildcard, the
>>> intention is for subclasses to override this method when possible.
>>>
>>
>>
>>
>> 1. FYI it appears I reviewed the .0 version since the reference to
>> the .1 was so far down I didn't see it
>>
>> 2. I hadn't noticed until now that Henry also mentioned the
>> getCategory() API ..
>>
>> 3. The 64 (!) other peer subclasses all use Class<? extends Attribute>.
>> Yes, it will be a DialogTypeSelection but the primary use case is
>> to be a member of a
>> collection of Attribute so a more specific API type isn't very
>> useful at all .. and it
>> will just stick out like a sore thumb.
>>
>>
>
> It is unfortunate that the other peer subclasses were suboptimally
> generified to not use a covariant return when this API was initially
> generified. From the sampling of methods I looked all, the methods in
> question are final and state something like "This method must return
> this specific Class object for the Foo class." Given that
> specification, the typing of the getCategory method should reflect the
> required behavior of the method and return a Class<Foo> rather than a
> Class<? extends Attribute>.
>
> However, to be consistent with the existing poor generification, in
> the .2 version of the webrev above I have changed the return type of
> the method to the less informative Class<? extends Attribute>.
>
> -Joe
>
> PS I compile the classes before I send them out for a code review so
> if there is a type error that would break the build, that is caught
> beforehand.
More information about the 2d-dev
mailing list