On Fri, 31 Jul 2026 00:54:13 GMT, Chen Liang <[email protected]> wrote:
>> Introduce an instance method, `isClassOrInterface`, to `java.lang.Class` and >> `java.lang.invoke.TypeDescriptor$OfField`. >> >> `java.lang.constant.ClassDesc` comes with an `isClassOrInterface` method. It >> turns out that such a check is frequently needed in the use of `Class` >> objects, usually as `isArray() || isPrimitive()` or `!isArray() && >> !isPrimitive()`, with 14 occurrences in various reflective code. >> >> In addition, `Class` can offer a more efficient implementation than two >> checks: it can perform a single bit pattern check to derive this result, >> making such an API more feasible. >> >> --------- >> - [x] I confirm that I make this contribution in accordance with the >> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). > > Chen Liang has updated the pull request with a new target base due to a merge > or a rebase. The incremental webrev excludes the unrelated changes brought in > by the merge/rebase. The pull request contains five additional commits since > the last revision: > > - Update usage in Valhalla > - Merge branch 'master' of https://github.com/openjdk/jdk into > feature/class-is-class-or-interface-1 > - Simplify code > - Merge branch 'master' of https://github.com/openjdk/jdk into > feature/class-is-class-or-interface-1 > - Class.isClassOrInterface Hello Chen, at the very least, the name of this new method will need additional thoughts. The immediate thought that comes to mind when seeing this method name is how it would behave with `Class` instance which represent (for example) `enum` or `record`. I think if the goal is to have a method which guarantees that the type represented by the `Class` instance is not an array or a primitive, then maybe that detail should be in the method name in some form. Or maybe a much more formal term (I haven't looked up if there is any) for such types. As for performance motivations for this new API, I don't think that should be a consideration for this proposal. Finally, it's not clear that the current usage patterns like `cls.isArray() || cls.isPrimitive()` is a (big enough) hassle that it deserves a new Java SE API. ------------- PR Comment: https://git.openjdk.org/jdk/pull/32109#issuecomment-5138663662
