清單 24. 不要移除它
public E peek() {
return this.list.get(this.list.size()-1);
}
棧為空的情況
現在重新運行 清單 21 中的行為,結果順利通過。但是,在這樣做的過程中發現一個問題:如果棧為空,則 peek() 有怎樣的行為?如果說棧為空時調用 pop() 會拋出一個異常,那么 peek() 是否也應該如此?
Linda 對此沒有進行解釋,所以,顯然我需要自己添加新的行為。在清單 25 中,我為 “當之前沒有調用 push() 時調用 peek() 會怎樣” 這個場景編寫了代碼。
清單 25. 如果沒有調用 push 就調用 peek,會怎樣?
public void shouldReturnNullOnPeekWithoutPush() throws Exception{
Ensure.that(stStack.peek(), m.is(null));
}
同樣,不會感到意外。如清單 26 所示,問題出現了。
清單 26. 沒有可執行的內容
1) StackBehavior should return null on peek without push:
java.lang.ArrayIndexOutOfBoundsException: -1
修復這個缺陷的邏輯類似于 pop() 的邏輯,如清單 27 所示。
清單 27. 這個 peek() 需要做一些修復
public E peek() {
if(this.list.size() > 0){
return this.list.get(this.list.size()-1);
}else{
return null;
}
}
把我對 Stack 類作出的所有修改和修復綜合起來,可以得到清單 28 中的代碼。
清單 28. 一個可正常工作的棧
import java.util.ArrayList;
public class Stack<E> {
private ArrayList<E> list;
文章來源于領測軟件測試網 http://www.kjueaiud.com/