我正在探索使用Optionals。 在下面的情况下,如果列表(包含数据对象)在特定索引处没有对象,我想实例化一个新对象(这里是数据对象)。 使用Optional可以实现吗?
List<Data> dataList = new ArrayList<>();
for (int i = 0; i < dataList.size();i++) {
Data data = Optional.ofNullable(dataList.get(i)).orElse(new Data()); // this will throw an error of index out of bounds
}
答案 0 :(得分:2)
Optional
,更具体地说Optional.ofNullable()
并非旨在捕获传递给其工厂方法的表达式执行中触发的任何异常。他们期望返回null
或ofNullable().
不返回的引用
Optional
最初旨在传达/限制一种方法可能返回某件事(空)。
在某些情况下,我们还可以依靠Optional
优雅地执行一些null
检查。
由于您想在返回列表元素或新对象之前检查列表的大小,因此您不在任何一种情况下。
因此,条件语句,尤其是三元运算符看起来更加适应:
Data data = i < dataList.size() ? dataList.get(i) : new Data();
答案 1 :(得分:0)
我认为您的代码没有错。对我来说效果很好。 get(i)
永远不会在代码中抛出AIOBE,因为它受到size()
的保护。
List<Integer> dataList = new ArrayList<>();
dataList.add(1);
dataList.add(null);
for (int i = 0; i < dataList.size(); i++) {
Integer data = Optional.ofNullable(dataList.get(i)).orElse(new Integer(-1));
System.out.println(data);
}
输出是1和-1。