2011-08-02 42 views
4

api doc說:確保索引指定數組,列表或字符串大小的有效元素。如何使用Google Guava的Preconditions.checkElementIndex?

但是,在這種方法傳遞'目標'數組或列表字符串?

+1

這是一個很好的問題 - 它暴露了多麼不一致的Java API。我甚至會期望具有大小/長度的類的通用接口。 –

回答

1

您不需要「目標」即可知道int索引對於給定大小的列表,字符串或數組是否有效。如果index >= 0 && index < [list.size()|string.length()|array.length]那麼它是有效的,否則不是。

3

方法Precondition.checkElementIndex(...)不關心「目標」。您只需通過sizeindex,具體如下:

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或其他。

6

內的元件的ArrayListString可以使用基於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()); 

替換此檢查所以,你不需要通過整個目標列表實例。相反,你只需要將目標列表的大小傳遞給這個方法。

相關問題