Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8318035

[Doc] Inconsistenency between the spec and the implementation for DateFormat.Field

    XMLWordPrintable

Details

    • CSR
    • Resolution: Approved
    • P4
    • 22
    • core-libs
    • None
    • behavioral
    • minimal
    • Simply a conformance specification update.
    • Java API
    • SE

    Description

      Summary

      DateFormat.Field::getCalendarField() claims that it will return -1 if there is no associated Calendar constant, which is not always true.

      Problem

      A DateFormat.Field is created via the Field(String name, int calendarField) constructor. The built in DateFormat.Field(s) are all created with calendarField equal to -1, if there is no Calendar constant. However, a user can subclass and create their own DateFormat.Field via the protected constructor with calendarField equal to anything, even if there is no Calendar constant. This is because the constructor does not actually make any checks on the value, although it is recommended in the specification to use -1. Thus, the method getCalendarField which simply returns the private member variable calendarField will not always return -1 if there is no associated Calendar constant.

      Solution

      Clarify that the default implementation always returns -1 if there is no Calendar constant using an implSpec tag. Change the existing wording from stating that it always returns -1 if there is no Calendar constant to returning -1 guarantees there is no Calendar constant.

      Specification

      Update DateFormat.Field::getCalendarField()

               /**
                * Returns the {@code Calendar} field associated with this
                * attribute. For example, if this represents the hours field of
      -         * a {@code Calendar}, this would return
      -         * {@code Calendar.HOUR}. If there is no corresponding
      -         * {@code Calendar} constant, this will return -1.
      +         * a {@code Calendar}, this method would return {@code Calendar.HOUR}.
      +         * The return value of {@code -1} guarantees that this field does not
      +         * represent any corresponding constant in {@code Calendar}.
      +         *
      +         * @implSpec The default implementation always returns {@code -1} if it does
      +         * not represent any corresponding constant in {@code Calendar}.

      Attachments

        Issue Links

          Activity

            People

              jlu Justin Lu
              hji Huafang Ji (Inactive)
              Naoto Sato
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: