api doc說:確保索引指定數組,列表或字符串大小的有效元素。如何使用Google Guava的Preconditions.checkElementIndex?
但是,在這種方法傳遞'目標'數組或列表字符串?
api doc說:確保索引指定數組,列表或字符串大小的有效元素。如何使用Google Guava的Preconditions.checkElementIndex?
但是,在這種方法傳遞'目標'數組或列表字符串?
您不需要「目標」即可知道int索引對於給定大小的列表,字符串或數組是否有效。如果index >= 0 && index < [list.size()|string.length()|array.length]
那麼它是有效的,否則不是。
方法Precondition.checkElementIndex(...)不關心「目標」。您只需通過size
和index
,具體如下:
public String getElement(List<String> list, int index) {
Preconditions.checkElementIndex(index, list.size(), "The given index is not valid");
return list.get(index);
}
據Guava's reference,方法checkElementIndex
可以實現如下:
public class Preconditions {
public static int checkElementIndex(int index, int size) {
if (size < 0) throw new IllegalArgumentException();
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
return index;
}
}
正如你所看到的,有沒有必要爲它知道List,Array或其他。
內的元件的Array
,List
和String
可以使用基於0的索引來訪問。
假設你想使用電話list.get(index)
索引。之前從列表訪問特定的元素,你可以使用下面的檢查這index
是爲了避免之間:
if (index < 0) {
throw new IllegalArgumentException("index must be positive");
} else if (index >= list.size()){
throw new IllegalArgumentException("index must be less than size of the list");
}
目的的Preconditions
類是更緊湊一個
Preconditions.checkElementIndex(index,list.size());
替換此檢查所以,你不需要通過整個目標列表實例。相反,你只需要將目標列表的大小傳遞給這個方法。
這是一個很好的問題 - 它暴露了多麼不一致的Java API。我甚至會期望具有大小/長度的類的通用接口。 –