On Fri, 2 Aug 2024 00:39:12 GMT, Chen Liang <li...@openjdk.org> wrote:
> 1. Add notes and docs about the difference between resolved constants and > constant pool descriptors for annotation constants (e.g. `char` vs > `IntegerEntry`) > 2. Improved value specification to specify their tags. > 3. Improved value factories to return their specific types instead of > `OfConstant` > 4. Improved value classes to return specific `PoolEntry` subtypes and > specific live constant subtypes > 5. Removed confusing and meaningless > `ConstantPoolBuilder.annotationConstantValueEntry` src/java.base/share/classes/java/lang/classfile/AnnotationValue.java line 90: > 88: */ > 89: @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) > 90: sealed interface OfConstant<C extends AnnotationConstantValueEntry, R > extends Comparable<R> & Constable> I suggest to minimize use of generics in combination with sealed interface trees and pattern matching. It does not give many benefits, it takes out a part of the code readability and adds many unnecessary brackets and questionmarks: case AnnotationValue.OfConstant<?, ?> oc -> `<R extends Comparable<R> & Constable>` at least brings a benefit of types combination. However I still think it does not outweigh the generics use cost. None of the generics parameter is near to orthogonal to the `OfConstant` nor critical for the API to operate. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/20436#discussion_r1701457480