JDK 9 RFR of JDK-8159330: Improve deprecation text for Class.newInstance
Roger Riggs
Roger.Riggs at Oracle.com
Tue Jun 14 15:13:33 UTC 2016
Hi Joe,
With the full method context, the proposed text is sufficient.
Thanks, Roger
On 6/13/2016 12:37 PM, joe darcy wrote:
> Hi Roger,
>
> On 6/13/2016 6:59 AM, Roger Riggs wrote:
>> Hi,
>>
>> That example kind of glosses over the need to handle 3 new exceptions.
>> That's been my annoyance with this change.
>>
>> throws InstantiationException, IllegalAccessException,
>> InvocationTargetException
>
> The patch sent to the list
> (http://mail.openjdk.java.net/pipermail/core-libs-dev/2016-June/041754.html),
> did note addition exception types are thrown by the replacement code.
> The proposed text with Max's improvement is
>
> + * <p>The call
> + *
> + * <pre>{@code
> + * clazz.newInstance()
> + * }</pre>
> + *
> + * can be replaced by
> + *
> + * <pre>{@code
> + * clazz.getConstructor().newInstance()
> + * }</pre>
> + *
> + * The latter sequence of calls is inferred to be able to throw
> + * the additional exception types {@link
> + * InvocationTargetException} and {@link
> + * NoSuchMethodException}. Both of these exception types are
> + * subclasses of {@link ReflectiveOperationException}.
> + *
>
> Class.newInstance is declared to throw InstantiationException and
> IllegalAccessException. Its implementation internally catches
> NoSuchMethodException and rethrows it as something else.
>
> I considered adding more text to guide developers more explicitly to
> either use multi-catch
>
> catch(InstantiationException | IllegalAccessException e) =>
> catch(InstantiationException | IllegalAccessException |
> InvocationTargetException | NoSuchMethodException e)
>
> or catching ReflectiveOperationException
>
> catch(InstantiationException | IllegalAccessException e) =>
> catch(ReflectiveOperationException e) =>
>
> With the more precise rethrow feature added in 7, catching
> ReflectiveOperationException and then rethrowing it doesn't lose any
> type information.
>
> I was hesitant to add such text as to not overwhelm further the
> non-deprecated text of the method. However, if people think such
> guidance is warranted, I'll craft something.
>
> Thanks,
>
> -Joe
>
>
>>
>> Roger
>>
>>
>>
>> On 6/12/2016 11:43 PM, joe darcy wrote:
>>>
>>> On 6/12/2016 7:21 PM, Wang Weijun wrote:
>>>> Why not just clazz.getConstructor().newInstance()?
>>>
>>> That seems to work to and is much shorter; thanks :-)
>>>
>>> -Joe
>>>
>>>>
>>>>> + * can be replaced by
>>>>> + *
>>>>> + * <pre>{@code
>>>>> + * clazz.getConstructor(new
>>>>> Class<?>[0]).newInstance((Object[])null);
>>>>> + * }</pre>
>>>
>>
>
More information about the core-libs-dev
mailing list