我有這樣的代碼由其他人編寫,我很難理解它。此代碼背後的邏輯說明 - Java
這是工作的罰款,併產生正確的結果,但我不明白它是如何工作
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!");
}
}
}
輸出是:I'm a Volkswagen with 20 clowns!
但每當我在 '大衆' add()
方法印刷
clowns.size()
,它總是返回0,那麼爲什麼它比較
clowns.size() == 20
並將其評價爲真實?