JDK-8281922 : Class.getCanonicalName spec should explicitly cover array classes
  • Type: CSR
  • Component: core-libs
  • Sub-Component: java.lang:reflect
  • Priority: P4
  • Status: Draft
  • Resolution: Unresolved
  • Fix Versions: 19
  • Submitted: 2022-02-15
  • Updated: 2022-02-16
Related Reports
CSR :  
Description
Summary
-------

Update the specification of `Class.getCanonicalName` method to explicitly describe the behavior for arrays.

Problem
-------

Unlike other `Class` -> name methods in `java.lang.Class`,  `Class.getCanonicalName` does not describe how arrays are handled.

Solution
--------
Add explicit discussion of arrays (and primitive types, for good measure).

Specification
-------------

    --- a/src/java.base/share/classes/java/lang/Class.java
    +++ b/src/java.base/share/classes/java/lang/Class.java
    @@ -1732,8 +1732,18 @@ public final class Class<T> implements java.io.Serializable,
          * <li>an array whose component type does not have a canonical name</li>
          * </ul>
          *
    +     * The canonical name for a primitive class is the keyword for the
    +     * corresponding primitive type ({@code byte}, {@code short},
    +     * {@code char}, {@code int}, and so on).
    +     *
    +     * <p>An array type has a canonical name if and only if its
    +     * component type has a canonical name. When an array type has a
    +     * canonical name, it is equal to the canonical name of the
    +     * component type followed by "{@code []}".
    +     *
          * @return the canonical name of the underlying class if it exists, and
          * {@code null} otherwise.
    +     * @jls 6.7 Fully Qualified Names and Canonical Names
          * @since 1.5
          */
         public String getCanonicalName() {