我想知道在列表中进行前置条件检查的最佳模式是什么,我需要从中选择第一项.
换句话说,我认为列表不应为null,其大小应为> 1.
我发现Guava的checkPositionIndex在这方面没有帮助.相反,我发现它违反直觉,请参阅下面的例子,它在空列表上炸弹,因为我使用checkPositionIndex而不是checkArgument,如后面没有触发的后卫所概述的那样.
似乎检查位置0不足以验证参数,即使我.get(0)来自它?
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkPositionIndex;
import java.util.List;
import com.google.common.collect.Lists;
public class HowShouldIUseCheckPositionIndex {
private static class ThingAMajig {
private String description;
private ThingAMajig(String description) {
this.description = description;
}
@Override
public String toString() {
return description;
}
}
private static void goByFirstItemOfTheseAMajigs(List things) {
checkNotNull(things);
// Check whether getting the first item is fine
checkPositionIndex(0, things.size()); // Looks intuitive but...
System.out.println(things.get(0)); // Finally, help the economy!
checkArgument(things.size() > 0); // This would have worked :(
}
public static void main(String[] args) {
List fullList =
Lists.newArrayList(new ThingAMajig(
"that thingy for the furnace I have been holding off buying"));
List emptyList = Lists.newLinkedList();
goByFirstItemOfTheseAMajigs(fullList);
// goByFirstItemOfTheseAMajigs(emptyList); // This *bombs*
}
}