On Fri, 26 Mar 2021 15:15:48 GMT, Daniel Fuchs <dfu...@openjdk.org> wrote:

>> This RFE proposes to extend the MXBean framework to define a mapping to 
>> records.
>> 
>> The MXBean framework already defines a mapping of `CompositeType` to plain 
>> java objects. Records are a natural representation of CompositeTypes. A 
>> record can be easily reconstructed from a `CompositeData` through the record 
>> canonical constructor. A clear advantage of records over plain java objects 
>> is that the canonical constructor will not need to be annotated in order to 
>> map composite data property names to constructor parameter names.
>> 
>> With this RFE, here is an example comparing coding a composite type 
>> `NamedNumber` that consists of an `int` and a `String`, using records and 
>> using a plain java class. In both case, the `CompositeType` looks like this:
>> 
>> CompositeType(
>>     "NamedNumber",                      // typeName
>>     "NamedNumber",                      // description
>>     new String[] {"number", "name"},    // itemNames
>>     new String[] {"number", "name"},    // itemDescriptions
>>     new OpenType[] {SimpleType.INTEGER,
>>                     SimpleType.STRING}  // itemTypes
>> );
>> 
>> The plain Java class needs a public constructor annotated with 
>> `@ConstructorParameters` annotation:
>> 
>> public class NamedNumber {
>>     public int getNumber() {return number;}
>>     public String getName() {return name;}
>>     @ConstructorParameters({"number", "name"})
>>     public NamedNumber(int number, String name) {
>>         this.number = number;
>>         this.name = name;
>>     }
>>     private final int number;
>>     private final String name;
>> }
>> 
>> And the equivalent with a record class: 
>> 
>> public record NamedNumber(int number, String name) {}
>
> Daniel Fuchs has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Fixed typo. Moved example with record after example with from method to 
> respect the logical order of precedence.

src/java.management/share/classes/javax/management/MXBean.java line 757:

> 755: 
> 756:     <p>If the class is a {@link Record}, its getters are the
> 757:       accessors for the record components. Otherwise, the

It may be good to add a link like {@linkplain RecordComponent record components}

-------------

PR: https://git.openjdk.java.net/jdk/pull/3201

Reply via email to