2つのカレンダーインスタンス(開始と終了)と他の多くの管理情報で作られたweekというクラスのインスタンスを基本的に含むこの時間コンテナを開発しています。関連する)whileループ内のカレンダーに関する問題
問題は私がwhileループでこれらのWeekインスタンスを作成することです、そして、私は週インスタンス(whileループでカレンダーミリ秒を印刷しています)の作成中に、週のリストの内容を確認してください、彼らはそうではありません!カレンダーのすべてのインスタンス(開始および終了)には、すべての週について同じ値が含まれます。
私はあなたたちは、問題を明確に理解できるように、コードのビットを書いている、クラス(コンテナとBiggerContainer)があります
public class Container
{
private static final long serialVersionUID = 1L;
private Calendar start;
private Calendar end;
public Container(Calendar start, Calendar end)
{
this.start = start;
this.end = end;
}
public Calendar getStart()
{
return start;
}
public Calendar getEnd()
{
return end;
}
}
Bigger container:
public class BiggerContainer
{
private static final long serialVersionUID = 1L;
private ArrayList<Container> containerList = new ArrayList<Container>();
public void init()
{
int i = 0;
long max = 604800000;
long nu = Calendar.getInstance().getTimeInMillis();
Calendar startC = Calendar.getInstance();
Calendar endC = Calendar.getInstance();
while (i <= 5)
{
startC.setTimeInMillis(nu);
endC.setTimeInMillis(nu + max);
System.out.println("At creation time: " + startC.getTimeInMillis() + "/" + endC.getTimeInMillis());
containerList.add(new Container(startC, endC));
nu += max;
i++;
}
}
public void show()
{
for (Container c : containerList)
{
System.out.println("Start millis: " + c.getStart().getTimeInMillis() + " end millis "
+ c.getEnd().getTimeInMillis());
}
}
/**
* TEST
*
* @param args
*/
public static void main(String[] args)
{
BiggerContainer bc = new BiggerContainer();
bc.init();
bc.show();
}
}
出力:
At creation time: 1336480993036/1337085793036
At creation time: 1337085793036/1337690593036
At creation time: 1337690593036/1338295393036
At creation time: 1338295393036/1338900193036
At creation time: 1338900193036/1339504993036
At creation time: 1339504993036/1340109793036
Start millis: 1339504993036 end millis 1340109793036
Start millis: 1339504993036 end millis 1340109793036
Start millis: 1339504993036 end millis 1340109793036
Start millis: 1339504993036 end millis 1340109793036
Start millis: 1339504993036 end millis 1340109793036
Start millis: 1339504993036 end millis 1340109793036
あなたが見ることができるようにinit()メソッドでのContainerインスタンスの作成中にCalendarインスタンスは正しい量のミリ秒を提供し、showメソッドではすべて同じミリ秒を出力します。
あなたは何か考えていますか? 私はそれが非常に新しい間違いであるという印象を持っていますが、どこが間違っているのかわかりません。
ありがとう、私はそれは "単純な"解決策でしたが、なぜCalendar.setTimeInMillis()はカレンダーのMILLISECONDフィールドを変更しませんでしたか? – JBoy
@JBoyです。問題は、すべてのコンテナに対して同じカレンダーを再利用していることです。ですから、setTimeInMillisで 'startC'(例えば)を変更すると、実際には' startC'を使っているので、すべてのコンテナでそれを変更しています。 –
素晴らしい!ありがとう、ギョーム – JBoy