所以我有一个字符串的arraylist,我目前正在使用一种方法,因此用户可以通过输入索引号来访问并返回arraylist中的某些元素。
如果他们试图访问不在数组中的索引号,我想抛出自己的数据异常。在一分钟它抛出一个索引超出范围的例外。目前我正在使用下面的if语句然而它不起作用!我怎么能这样做?
if (set.get(index) == null) {
throw new DataException("Record does not exists!");
}
答案 0 :(得分:1)
尝试从ArrayList访问越界索引将始终抛出IndexOutOfBounds异常。要解决此问题,您有两种选择。您可以避免询问元素,直到您确定它存在或者您可以捕获错误。
要捕获错误,您可以使用try-catch块,如下所示:
#config/packages/swiftmailer.yaml
swiftmailer:
url: '%env(MAILER_URL)%'
spool: { type: 'memory' }
为避免首先触发错误,您可以确保索引在ArrayList的范围内,如下所示:
try {
someVariable = set.get(index);
} catch(Exception e) {
throw new DataException(...);
}
答案 1 :(得分:1)
您只需要测试索引既不是负数也不是高于或等于列表大小:
if ( index < 0 || index >= list.size() ) {
throw new DataException("Record does not exists!");
}
当List.get(int index)
javadoc停留时:
抛出:
IndexOutOfBoundsException - 如果索引超出范围(索引&lt; 0 || index&gt; = size())
现在我不确定将IndexOutOfBoundsException
包裹在DataException
中是个好主意
访问数组边界索引是一个编程错误
<{1}}在
IndexOutOfBoundsException
可能被理解为客户端错误。
答案 2 :(得分:0)
将条件更改为:
if(index < 0 || index >= set.size()){
...
}
答案 3 :(得分:0)
if (index < 0 || index >= set.size() || set.get(index) == null) {
throw new DataException("Record does not exists!");
}
在执行get之前测试索引是否在ArrayList中 ()避免IndexOutOfBoundsException。如果前两个条件中的任何一个为真,则不会达到get()。