Java 8 列表范围内的测试索引
首先,我想告诉大家,我是一名经验丰富的Java开发人员,这不是一个新手问题 我们都知道检查给定索引是否在Java 8 列表范围内的测试索引,java-8,Java 8,首先,我想告诉大家,我是一名经验丰富的Java开发人员,这不是一个新手问题 我们都知道检查给定索引是否在列表范围内的测试。即: if (index >= 0 && index < list.size()) 谷歌没有给我任何结果,我在新的API中也找不到任何方法。所以也许社区知道是否有这样的东西 我对解决这个问题的第三方库不感兴趣。这不完全是一个答案-只是java 8中辅助方法放置的一个额外选项。但是,没有办法轻松地附加助手接口,因此这不是一个可行的解决方案 publ
列表
范围内的测试。即:
if (index >= 0 && index < list.size())
谷歌没有给我任何结果,我在新的API中也找不到任何方法。所以也许社区知道是否有这样的东西
我对解决这个问题的第三方库不感兴趣。这不完全是一个答案-只是java 8中辅助方法放置的一个额外选项。但是,没有办法轻松地附加助手接口,因此这不是一个可行的解决方案
public interface MyList<E> extends List<E> {
default boolean isWithinBounds(int index) {
return 0 <= index && index < this.size();
}
}
static class MyArrayList<E> extends ArrayList<E> implements MyList<E> {
}
public void testList() {
MyList<String> l = new MyArrayList<>();
l.add("1");
l.add("2");
l.add("3");
assert(l.isWithinBounds(2));
assert(!l.isWithinBounds(3));
}
公共接口MyList扩展列表{
默认布尔值为WithInbounds(整数索引){
返回0,这是捕获IndexOutOfBoundsException
不合适的地方吗?当然不是,但如果需要,编写实用方法很简单。我发现if(index>=0&&index
简短明了。实际上,我的目标主要是通过编写此测试时出错来提高可读性和防止错误。我相信在这种情况下使用异常处理会显著降低可读性,甚至会造成性能下降。我看到的问题是不知道索引是否有效这不是一点代码味道。这是用户输入的结果吗?@ChristopherS:最大的问题是为什么任何程序员都应该做这个测试?如果测试失败,预期的操作是什么?通常,应该抛出一个适当的异常来标记错误的索引。这就是列表
实现已经为您做的事情。
public interface MyList<E> extends List<E> {
default boolean isWithinBounds(int index) {
return 0 <= index && index < this.size();
}
}
static class MyArrayList<E> extends ArrayList<E> implements MyList<E> {
}
public void testList() {
MyList<String> l = new MyArrayList<>();
l.add("1");
l.add("2");
l.add("3");
assert(l.isWithinBounds(2));
assert(!l.isWithinBounds(3));
}