JDK 1.6の調査中に見つけたばかりですArrayBlockingQueue
-コンストラクターは、パブリックのオーバーライド可能なメソッドの1つを呼び出します!これは特にAPIにとっては悪い習慣だと思いました。
public ArrayBlockingQueue(int capacity, boolean fair,
Collection<? extends E> c) {
this(capacity, fair);
if (capacity < c.size())
throw new IllegalArgumentException();
for (Iterator<? extends E> it = c.iterator(); it.hasNext();)
add(it.next()); // -> surprise: add is public
}
私は実際にを拡張しようとしていてArrayBlockingQueue
、いくつかの状態を追加してオーバーライドしましたが、コンストラクターを呼び出すadd()
とすぐに取得しました。ここにいくつかのデザインコンセプトが欠けていますか?java.lang.NullPointerException
super(capacity,fair,col)