早稲田大学の太田です。ちょっと気になったところを。
> /* test only */ public boolean equals(Sum sum) {
> System.out.println("Sum.equals");
> return name.equals(sum.getName()) && amount == sum.getAmount();
> }
>
> これで、テストを実行しましたが、思っていた通り、「Sum.eq
> uals」は、表示されま
> せんでした。そこでキャストを使い、isEqualを修正しました。
>
> --- SummarizerTestHelper 14:51
>
> public boolean isEqual(ArrayList first, ArrayList second) {
> if (first.size() == second.size()) {
> for (int index = 0; index < first.size(); index++) {
>
> System.out.println("first " +
> first.get(index).toString());
> System.out.println("second " +
> second.get(index).toString());
>
> if (! ((Sum) first.get(index)).equals((Sum)
> second.get(index)))
> {
> return false;
> }
> }
> }
> return false;
> }
ここで起こっている問題は、
> /* test only */ public boolean equals(Sum sum) {
> return name.equals(sum.getName()) && amount == sum.getAmount();
> }
を
/* test only */ public boolean equals(Object sum) {
return name.equals((Sum) sum.getName()) && amount == (Sum)
sum.getAmount();
}
とすれば、
> if (! ((Sum) first.get(index)).equals((Sum)
> second.get(index)))
において、キャストをしなくても済むのではないのでしょうか。equals(Sum
sum)ではOjbectのequals(Ojbect obj)をオーバーライドはしていませんよね。
確か、何ヶ月か前のC MAGAZINEで同じような話があったような気がします。
早稲田大学大学院理工学研究科情報科学専攻M2 太田健一郎
e-mail Address oota@....jp
oota@....jp