如果Array中不存在元素,如何抛出数据异常?

时间:2018-02-21 20:59:33

标签: java

所以我有一个字符串的arraylist,我目前正在使用一种方法,因此用户可以通过输入索引号来访问并返回arraylist中的某些元素。

如果他们试图访问不在数组中的索引号,我想抛出自己的数据异常。在一分钟它抛出一个索引超出范围的例外。目前我正在使用下面的if语句然而它不起作用!我怎么能这样做?

if (set.get(index) == null) {
        throw new DataException("Record does not exists!");
    }

4 个答案:

答案 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()。