Hello,

The method Class.getPackage is behaving as specified:

public Package getPackage()
Gets the package of this class.

If this class represents an array type, a primitive type or void, this method returns null.

as is Class.getPackageName():

If this class represents an array type then this method returns the package name of the element type. If this class represents a primitive type or void then the package name "|java.lang|" is returned.

and ClassDesc.packageName is as well.

Class.getPackage has been doing what it been doing since about JDK 1.2 so due to behavioral compatibility, there would have to be a much stronger case for altering its behavior at this point.

-Joe

On 8/22/2022 2:17 AM, Kasper Nielsen wrote:
Hi,

I was playing around with java.lang.constant and found an inconsistency between
ClassDesc::packageName and Class::getPackageName as outlined in the table below.
Specifically dealing with primitive and array types.

Class       ClassDesc::packageName Class::getPackage Class::getPackageName
  ---------- ---------------------- ----------------- ---------------------
   int        ""                     null              "java.lang"
   int[]      ""                     null              "java.lang"
   Integer    "java.lang"            java.lang         "java.lang"
   Integer[]  ""                     null              "java.lang"

I was originally going to submit a patch for ClassDesc. But I now think
Class::getPackageName is the one that I need to patch. Thoughts?

Thanks,
   Kasper

Reply via email to