[threeten-dev] Issues for some methods in ChronoField

Patrick Zhang patrick.zhang at oracle.com
Sun May 12 18:41:22 PDT 2013


Hi Stephen,

It is ok that getName() and toString() will return same thing.
But the problem is below code does not work.
=========

for(ChronoField field: ChronoField.values()){
                 assertEquals(ChronoField.valueOf(field.getName()), field);
}

=========

I guess field.getName() should return something can be used by 
valueOf(String name).

Regards
Patrick

On 5/10/13 6:19 PM, Stephen Colebourne wrote:
> The enum constant name is available via name() as with all enums.
>
> getName() is a mixed case variant. By taking control of the
> toString(), we ensure that all implementations (enum or non-enum) have
> a consistent toString.
>
> Stephen
>
>
> On 10 May 2013 04:50, Patrick Zhang<patrick.zhang at oracle.com>  wrote:
>> Hi Team,
>>
>> It looks the valueOf(String name), getName() and toString() are
>> incompatible.
>> For example,
>> ===========
>>          System.out.println(ChronoField.SECOND_OF_DAY.getName());
>>          System.out.println(ChronoField.SECOND_OF_DAY.toString());
>> ===========
>> Both of them will print "SecondOfDay".
>>
>> But if you try below, it will throw exception:
>>          System.out.println(ChronoField.valueOf("SecondOfDay"));
>>
>> FYI, below code works well:
>>          System.out.println(ChronoField.valueOf("SECOND_OF_DAY"));
>>
>>
>> Personally I do not think it make sense. As one application engineer, I
>> would believe below code should work:
>> =========
>> for(ChronoField field: ChronoField.values()){
>>                  assertEquals(ChronoField.valueOf(field.getName()), field);
>>          }
>> =========
>>
>> Regards
>> Patrick


More information about the threeten-dev mailing list