Java编程思想20章的一个例子,20.2编写注解处理器,在list<Interger> useCases中移除注解中出现了的id(int):
public static void trackUseCases(List<Integer> useCases, Class<?> cl) {
for(Method method : cl.getDeclaredMethods() ) {
UseCase uc = method.getAnnotation(UseCase.class);
if( uc!=null ) {
System.out.println("Found Use Case: " + uc.id() + " " + uc.description());
// // useCases.remove(uc.id()); //IndexOutOfBoundsException
useCases.remove(new Integer(uc.id()));
//或者 useCases.remove(useCases.indexOf(uc.id()));
}
}
for( int i : useCases ) {
System.out.println("Warning: Missing use case-" + i);
}
}
开始就写了第一种方式,结果就抛异常了,看看源码:
List对象重载了两个remove方法,1、remove(int index), 2、 remove(Object o)。
1.
/**
* Removes the element at the specified position in this list (optional
* operation). Shifts any subsequent elements to the left (subtracts one
* from their indices). Returns the element that was removed from the
* list.
*
* @param index the index of the element to be removed
* @return the element previously at the specified position
* @throws UnsupportedOperationException if the <tt>remove</tt> operation
* is not supported by this list
* @throws IndexOutOfBoundsException if the index is out of range
* (<tt>index < 0 || index >= size()</tt>)
*/
E remove(int index);
2.
/**
* Removes the first occurrence of the specified element from this list,
* if it is present (optional operation). If this list does not contain
* the element, it is unchanged. More formally, removes the element with
* the lowest index <tt>i</tt> such that
* <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt>
* (if such an element exists). Returns <tt>true</tt> if this list
* contained the specified element (or equivalently, if this list changed
* as a result of the call).
*
* @param o element to be removed from this list, if present
* @return <tt>true</tt> if this list contained the specified element
* @throws ClassCastException if the type of the specified element
* is incompatible with this list
* (<a href="Collection.html#optional-restrictions">optional</a>)
* @throws NullPointerException if the specified element is null and this
* list does not permit null elements
* (<a href="Collection.html#optional-restrictions">optional</a>)
* @throws UnsupportedOperationException if the <tt>remove</tt> operation
* is not supported by this list
*/
boolean remove(Object o);