Каков прямой способ скопировать joda LocalTime? - PullRequest
4 голосов
/ 15 мая 2011

Я хочу новый экземпляр, который является копией.Я мог бы создать экземпляр из целых чисел, но, похоже, должен быть более прямой путь.Я мог бы также использовать некоторый подход, такой как copy = original.minus(zero), но это также косвенный подход.

Конструктор LocalTime, который принимает аргумент Java Object (для которого я использовал исходный LocalTime), не работает.Я думаю, он просто не поддерживает его.

        LocalTime start = new LocalTime(9, 0, 0);
        LocalTime stop = new LocalTime(17, 0, 0);

        //LocalTime time = start.minusSeconds(0);  // GOOD VERSION
        LocalTime time = new LocalTime(start);     // THE BAD VERSION

        assert time == start: "does not work";

        // EXTRANEOUS STUFF TO JUSTIFY COPYING AN IMMUTABLE, FOLLOWS...
        while (time.compareTo(stop) <= 0)
        {
            //method(time, new LocalTime(9, 0, 0), stop); // MESSY
            method(time, start, stop);                    // NICER
            time = time.plusMinutes(1);
        }

Я также пытался copy = new LocalTime(original.getLocalMillis()), но у меня нет доступа к getLocalMillis, поскольку он защищен.

Ответы [ 2 ]

8 голосов
/ 15 мая 2011

LocalTime является неизменным, поэтому нет смысла удерживать 2 экземпляра с одинаковым значением.Они могут быть общими (даже между потоками).Методы мутации, например, плюс / минус, вернут новое значение, поэтому вы можете создать свою копию «по требованию», когда вам понадобится измененное значение.

LocalTime start = new LocalTime(9, 0, 0);
LocalTime stop = new LocalTime(17, 0, 0);
LocalTime time = start;     // Just use the reference

while (time.compareTo(stop) <= 0)
{
    method(time, start, stop);
    time = time.plusMinutes(1);
}
0 голосов
/ 15 мая 2011

Это прекрасно работает для меня:

LocalTime t1 = new LocalTime();
try {
   // Sleep for a bit just to make sure the current system time moves on
   Thread.sleep(5000);
} catch (InterruptedException e) { }
LocalTime t2 = new LocalTime(t1);
assertEquals(t1, t2);

Обратите внимание на вторую строку - я думаю, это то, что вы ищете. t2 получает то же время в миллисекундах с начала эпохи, что и t1.

Так что именно вы имеете в виду, когда говорите, что конструктор копирования (который я использовал OK выше) "не работает"?

...