[Java]GregorianCalendar get() jak jest zbudowane?


(Marcin E Pc) #1

Witam!

Na początek zaznaczę że się uczę dopiero Javy. I potrzebne było mi wykorzystać jakąś klasę operującą na datach. Znalazłem GregorianCalendar i spisuje sie świetnie. Jednak zaciekawiło mnie jak działą metody get i set. Można w nich podać wiele parametrów np:

set(Calendar.DAY_OF_WEEK, 5);

get(Calendar.WEEK_OF_YEAR);

get(Calendar.ERA);

Interesuje mnie to, że do jednego get'a można przekazać wiele stringów. I teraz pytanie: czy wtedy get jest skonstruowany mniej więcej tak:

public int get(String s)

{

   if(s.compareTo("DAY_OF_WEEK"==0))

      return Calendar.DAY_OF_WEAK; //gdzie DAY_OF_WEEK jest zapisane w jakimś trybie wyliczeniowym

   else-if(s.compareTo("ERA"==0))

      return Calendar.ERA; // jak wyżej

    .

    .

    .

    .

}

Czy jest może jakieś inne, bardziej eleganckie rozwiązanie?

Pozdrawiam Marcin


(Sawyer47) #2

Calendar.XXX to liczby całkowite, a nie stringi. Cóż, wystarczyło użyć Google Code Search:

http://www.google.com/codesearch/p?hl=p ... cd=1&ct=rc

public void set(int field, int value)

    {

        // If the fields are partially normalized, calculate all the

        // fields before changing any fields.

        if (areFieldsSet && !areAllFieldsSet) {

            computeFields();

        }

        internalSet(field, value);

        isTimeSet = false;

        areFieldsSet = false;

        isSet[field] = true;

        stamp[field] = nextStamp++;

        if (nextStamp == Integer.MAX_VALUE) {

            adjustStamp();

        }

    }



    final void internalSet(int field, int value)

    {

        fields[field] = value;

    }

itd.


(Marcin E Pc) #3

Teraz rozumiem. Dzięki. A tej strony nie znałem, napewno się przyda.

Pozdrawiam