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