[threeten-dev] Issues for some methods in ChronoField

roger riggs roger.riggs at oracle.com
Thu May 16 13:11:28 PDT 2013


Hi Stephen,

There is still a problem because the javadoc for ChronoField.toString is 
inherited
from Enum.toString and it says unless overridden it returns the name in 
the declaration.

Having both name and getName is confusing especially since there is so 
little difference.

Roger



On 5/13/2013 3:16 AM, Stephen Colebourne wrote:
> This code does work:
>
> for(ChronoField field: ChronoField.values()){
>     assertEquals(ChronoField.valueOf(field.name()), field);
> }
>
> Note name(), not getName().
>
> Stephen
>
>
> On 13 May 2013 02:41, Patrick Zhang <patrick.zhang at oracle.com> wrote:
>> 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