我需要做这样的事情:
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*
}
答案 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表达式中使用此函数。