このコードは他の人が書いたもので、理解するのに苦労しています。
正常に動作し、正しい結果を生成しますが、どのように機能するのか理解できませんでした
package you;
import clowns.Clown;
import clowns.Volkswagen;
public class You {
static int counter = 0;
static Volkswagen vw = new Volkswagen();
public static void main(String args[]) {
vw.add(new RecursiveClown());
vw.done();
}
static class RecursiveClown extends Clown {
public int hashCode() {
if (++counter < 20) {
vw.add(new RecursiveClown());
}
return super.hashCode();
}
}
}
どうやらRecursiveClown
どこでも呼び出されていないこともそのhashcode()
機能も理解できませんでした
それでは、どのように機能し、RecursiveClown
オブジェクトを追加しますか。
また、なぜそれが戻ってくるのかsuper.hashCode();
上記のコードで参照されたこの他のクラスがあります。
package clowns;
import java.util.HashSet;
import java.util.Set;
public class Volkswagen {
private static final int CAPACITY = 5;
private Set<Clown> clowns = new HashSet<Clown>();
public synchronized void add(Clown clown) {
if (clowns.size() >= CAPACITY) {
throw new IllegalStateException("I'm full");
} else {
clowns.add(clown);
}
}
public synchronized void done() {
if (clowns.size() == 20) {
// The goal is to reach this line
System.out.println("I'm a Volkswagen with 20 clowns!");
}
}
}
これら 2 つのクラスの出力は次のとおりです。I'm a Volkswagen with 20 clowns!
しかし、私が印刷するたびに
clowns.size()
「フォルクスワーゲン」のadd()
メソッドでは、常に 0 が返されます。
clowns.size() == 20
そしてそれを真と評価しますか?