我想要一个副本的新实例。我可以从整数实例化,但似乎应该有一个更直接的方式。我也可以使用某种方法,如copy = original.minus(zero)
,但这也是间接的。
接受Java Object参数(我使用原始LocalTime)的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
,因为它受到保护。
答案 0 :(得分:8)
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);
}
答案 1 :(得分:0)
这对我来说很好用:
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)“不起作用”时,你的意思是什么?