RFR: 8268250: Class.arrayType() for a 255-d array throws undocumented IllegalArgumentException [v2]
Joe Darcy
joe.darcy at oracle.com
Mon Jun 7 16:24:37 UTC 2021
Hi Alan,
On 6/6/2021 11:01 PM, Alan Bateman wrote:
> On Mon, 7 Jun 2021 00:22:41 GMT, Joe Darcy <darcy at openjdk.org> wrote:
>
>>> Make explicit illegal argument cases of Class.arrayType.
>>>
>>> Please also review the corresponding CSR: https://bugs.openjdk.java.net/browse/JDK-8268300
>> Joe Darcy has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Add missing ending newline.
> src/java.base/share/classes/java/lang/Class.java line 4440:
>
>> 4438: * @throws IllegalArgumentException if this component type is {@linkplain
>> 4439: * Void#TYPE void} or if the number of dimensions of the resulting array
>> 4440: * type would exceed 255.
> This is a no-arg method so I'm not sure that IAE is the right exception. The method was added in Java 12 so there probably isn't a huge body of code that expects it to throw IAE, meaning it may be possible to change it with little/no impact.
Pedantically, "this" is an argument of sorts, but admittedly that line
of reasoning doesn't usually yield a very satisfying user-experience
for a method.
I wanted to avoid introducing any exception adaptation code to the
one-line call to Array.newInstance.
A less direct way to address the lack of exception specification there
would be "@implSpec Code equivalent to return Array.newInstance(this,
0).getClass();", which would pull in the throws clauses from that method.
I'll also note I only proposed changing the spec for Class.arrayType
rather than the arrayType method in the superinterface or other
implementations. The Class.arrayType method has the strongest ties to
the particular 255 limit.
Thanks,
-Joe
More information about the core-libs-dev
mailing list