我使用Java 6 Collecetions API。我需要一個應該只有N個元素的集合。我的意思是,如果我添加新的元素並且集合已經有N個元素,那麼最後一個元素應該被刪除,並且新的元素將添加到集合的頭部。我有以下代碼片段來做到這一點:LinkedList.pollLast()拋出NullPointerException異常
class A {
int N = 100;
Deque dq = new LinkedList();
void add(Object o) {
synchronized (o) {
if (dq.size() == N) {
dq.pollLast();
}
dq.add(o);
}
}
Deque getDq() {
return new LinkedList(dq);
}
}
與類型A的對象可以在同一時間訪問許多用戶添加新元素。在實踐中我得到NullPointerException異常與它:
Caused by: java.lang.NullPointerException
at java.util.LinkedList.remove(LinkedList.java:790)
at java.util.LinkedList.removeLast(LinkedList.java:144)
at java.util.LinkedList.pollLast(LinkedList.java:573)
at A.add(A.java:9)
Deque.pollLast()的合同並沒有說明任何的NullPointerException:
獲取並移除此列表的最後一個元素 ,或返回null如果這個 列表是空的。
同步添加元素。
有誰知道異常的原因是什麼?
感謝您的任何想法
你應該一個共同的對象上進行同步(即列表,'this'或一些特殊的鎖定對象),而不是在參數。不知道這是否會導致你的問題。 – 2011-04-21 10:59:31
是你使用的代碼嗎?如果是這樣,你運行哪種語言? 'Dequeu'沒有公共領域'大小',你可以像這樣訪問。 – 2011-04-21 11:01:53
@user:這是一種方法,你可以不用'()'來訪問它。我知道這可能是一個錯字,但這意味着您向我們顯示的代碼是**而不是代碼有問題。請製作[SSCCE](http://sscce.org/)。 – 2011-04-21 11:04:35