gpt4 book ai didi

java - Guava 前提条件检查,空列表

转载 作者:搜寻专家 更新时间:2023-10-31 08:11:11 27 4
gpt4 key购买 nike

我想知道在需要从列表中选择第一项的前提条件检查的最佳模式是什么。

换句话说,我认为列表不应该是 null 并且它的大小应该 > 1。

我发现 Guava 的 checkPositionIndex 在这方面没有帮助。相反,我发现它违反直觉,请参见下面的示例,该示例在一个空列表上进行轰炸,因为我使用 checkPositionIndex 而不是 checkArgument,如不触发的 guard 所概述的那样。

似乎检查位置 0 不足以验证参数,即使我从中获取(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<ThingAMajig> 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<ThingAMajig> fullList =
Lists.newArrayList(new ThingAMajig(
"that thingy for the furnace I have been holding off buying"));
List<ThingAMajig> emptyList = Lists.newLinkedList();
goByFirstItemOfTheseAMajigs(fullList);
// goByFirstItemOfTheseAMajigs(emptyList); // This *bombs*
}
}

最佳答案

您应该改用 checkElementIndex()

checkPositionIndex() 确保给定位置是插入新元素的有效位置(即您可以在空列表上执行 add(0, obj)),不是从中获取元素的有效索引。

关于java - Guava 前提条件检查,空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12475532/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com