JDK 16 RFR of JDK-8250660: Clarify that WildcardType and AnnotatedWildcardType bounds methods return one
David Holmes
david.holmes at oracle.com
Mon Aug 3 23:42:29 UTC 2020
Hi Joe,
On 4/08/2020 2:24 am, Joe Darcy wrote:
> Hi David,
>
> To provide a bit more context, the API was consciously designed to be
> future-proofed against the possibility of Java supporting multiple
> bounds here (JDK-4891872). As of yet, that change has not come to pass,
Okay so we want to keep the API. :)
> and as you note may never come to pass. So besides in addition to the
> links into the JLS, I think it is reasonable to include an API note
> acknowledging the situation. How about:
>
> This method supports the existence of multiple bounds, but to date,
> a wildcard may have at most one upper/lower bound.
"to date" is just another form of "in the current version".
Sorry I find it hard to suggest suitable text when I don't think it
necessary to say anything.
Best to let others endorse this one.
Cheers,
David
-----
> -Joe
>
>
> On 8/2/2020 7:22 PM, David Holmes wrote:
>> Hi Joe,
>>
>> I was under the impression that using phrases like "the current
>> version of" were superfluous as all such documentation implicitly
>> refers to the current version, unless explicitly stated otherwise.
>>
>> Personally I'm not sure this clarification really makes a difference
>> to anything as the main source of confusion with this API is why it
>> states "bounds" rather than "bound" and thus returns an array. By
>> adding this clarification you will require a future update if the
>> language allows multiple bounds, forcing the docs to carry around
>> historical data "prior to Java N only a single bound were allowed but
>> since then multiple bounds ...". This seems unnecessary clutter to me.
>> Given the ship has sailed on the shape of this API the developer must
>> simply embrace it and always process the return value in a loop
>> without assuming any knowledge of how many bounds may actually exist.
>>
>> I think the reference to the JLS section suffices to instruct the
>> developer on where to find out how many bounds to expect, whatever
>> that may be in their current version of the JLS.
>>
>> If we think we will never support multiple bounds then these methods
>> should be deprecated (for removal) and replaced by a singular
>> counterpart that returns a single Type rather than a Type[].
>>
>> Cheers,
>> David
>> -----
>>
>> On 1/08/2020 8:12 am, Joe Darcy wrote:
>>> Hello,
>>>
>>> Please review the doc clarification below to address
>>>
>>> 8250660: Clarify that WildcardType and AnnotatedWildcardType
>>> bounds methods return one
>>>
>>> Thanks,
>>>
>>> -Joe
>>>
>>> diff -r b0553ba43ba1
>>> src/java.base/share/classes/java/lang/reflect/AnnotatedWildcardType.java
>>> ---
>>> a/src/java.base/share/classes/java/lang/reflect/AnnotatedWildcardType.java
>>> Fri Jul 31 11:35:25 2020 -0700
>>> +++
>>> b/src/java.base/share/classes/java/lang/reflect/AnnotatedWildcardType.java
>>> Fri Jul 31 15:12:14 2020 -0700
>>> @@ -1,5 +1,5 @@
>>> /*
>>> - * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All
>>> rights reserved.
>>> + * Copyright (c) 2012, 2020, Oracle and/or its affiliates. All
>>> rights reserved.
>>> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>>> *
>>> * This code is free software; you can redistribute it and/or
>>> modify it
>>> @@ -30,6 +30,7 @@
>>> * wildcard type argument, whose upper or lower bounds may
>>> themselves represent
>>> * annotated uses of types.
>>> *
>>> + * @jls 4.5.1 Type Arguments of Parameterized Types
>>> * @since 1.8
>>> */
>>> public interface AnnotatedWildcardType extends AnnotatedType {
>>> @@ -39,6 +40,9 @@
>>> * If no lower bound is explicitly declared, the lower bound is
>>> the
>>> * type of null. In this case, a zero length array is returned.
>>> *
>>> + * @apiNote In the current version of the Java Programming
>>> + * Language, a wildcard may have at most one lower bound.
>>> + *
>>> * @return the potentially annotated lower bounds of this
>>> wildcard type or
>>> * an empty array if no lower bound is explicitly declared.
>>> * @see WildcardType#getLowerBounds()
>>> @@ -50,6 +54,9 @@
>>> * If no upper bound is explicitly declared, the upper bound is
>>> * unannotated {@code Object}
>>> *
>>> + * @apiNote In the current version of the Java Programming
>>> + * Language, a wildcard may have at most one upper bound.
>>> + *
>>> * @return the potentially annotated upper bounds of this
>>> wildcard type
>>> * @see WildcardType#getUpperBounds()
>>> */
>>> diff -r b0553ba43ba1
>>> src/java.base/share/classes/java/lang/reflect/WildcardType.java
>>> --- a/src/java.base/share/classes/java/lang/reflect/WildcardType.java
>>> Fri Jul 31 11:35:25 2020 -0700
>>> +++ b/src/java.base/share/classes/java/lang/reflect/WildcardType.java
>>> Fri Jul 31 15:12:14 2020 -0700
>>> @@ -1,5 +1,5 @@
>>> /*
>>> - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All
>>> rights reserved.
>>> + * Copyright (c) 2003, 2020, Oracle and/or its affiliates. All
>>> rights reserved.
>>> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
>>> *
>>> * This code is free software; you can redistribute it and/or
>>> modify it
>>> @@ -29,6 +29,7 @@
>>> * WildcardType represents a wildcard type expression, such as
>>> * {@code ?}, {@code ? extends Number}, or {@code ? super Integer}.
>>> *
>>> + * @jls 4.5.1 Type Arguments of Parameterized Types
>>> * @since 1.5
>>> */
>>> public interface WildcardType extends Type {
>>> @@ -45,6 +46,9 @@
>>> * <li>Otherwise, B is resolved.
>>> * </ul>
>>> *
>>> + * @apiNote In the current version of the Java Programming
>>> + * Language, a wildcard may have at most one upper bound.
>>> + *
>>> * @return an array of Types representing the upper bound(s) of
>>> this
>>> * type variable
>>> * @throws TypeNotPresentException if any of the
>>> @@ -69,6 +73,9 @@
>>> * <li>Otherwise, B is resolved.
>>> * </ul>
>>> *
>>> + * @apiNote In the current version of the Java Programming
>>> + * Language, a wildcard may have at most one lower bound.
>>> + *
>>> * @return an array of Types representing the lower bound(s) of
>>> this
>>> * type variable
>>> * @throws TypeNotPresentException if any of the
>>> @@ -78,6 +85,4 @@
>>> * for any reason
>>> */
>>> Type[] getLowerBounds();
>>> - // one or many? Up to language spec; currently only one, but
>>> this API
>>> - // allows for generalization.
>>> }
>>>
More information about the core-libs-dev
mailing list