循环重复异常捕获

时间:2014-09-30 10:43:37

标签: java loops nullpointerexception goto

我需要做这样的事情:

while(prot.getProcessedTranscriptPositionFromAA(start) == null) start++;

但是因为prot抛出NullPointerException我无法像这样循环。如何创建一个捕获NullPointerException,增量开始并再次执行getProcessedTranscriptPositionFromAA的循环,依此类推,直到getProcessedTranscriptPositionFromAA不会抛出NullPointerException("没关系,#循环有可能是无限的。)

我从未使用goto,我甚至不知道如何使用is,但是这样的东西会以某种方式起作用吗?:

        *here*
        try{
            prot.getProcessedTranscriptPositionFromAA(start);
        }
        catch (NullPointerException e){
            start++;
            goto *here*
        }

4 个答案:

答案 0 :(得分:1)

您不需要goto - Java中没有实现goto。你可以把try/catch放在循环中。捕获异常时循环可以继续,有一件事与另一件事无关。

int start = 0;
boolean isNotNull = false;

while (!isNotNull) {
    try {
        prot.getProcessedTranscriptPositionFromAA(start);
        isNotNull = true;
    }
    catch (NullPointerException e) {
        start++;
    }
}

我写这篇文章时假设您对getProcessedTranscriptPositionFromAA()的实施方式没有发言权。但是,如果你确实控制了这个方法,或者知道那个人,那么确保在将索引传递给空位时它不会抛出NullPointerException - 这不是好的API设计。它应该返回一些指示该位置为空的东西。 There is a lot of lively disagreement关于是否应该是null或非空对象指示空虚; {{3}}但无论哪种方式,都不要抛出异常。

答案 1 :(得分:0)

您应该首先防止NullPointerException被抛出。 NullPointerException通常表示您的代码中存在错误。

while (prot != null && prot.getProcessedTranscriptPositionFromAA(start) == null) start++;

如果getProcessedTranscriptPositionFromAA本身可能会抛出NullPointerException,您也应该修复该方法。

答案 2 :(得分:0)

通常你会在类名的同一行写抛出NullPointerException 。用于在单个类中处理多个NullPointerException。

答案 3 :(得分:0)

您可以构建一个包装器方法,为您捕获NPE。

类似的东西:

public static boolean getSomething(ProtClass prot){
    try{
        //do something
        return true;
    }catch(NullPointerException e){
        return false;
    }
}

并在while表达式中使用此函数。