我试图在我的代码中调用以下内容:
public void checkParticleLightRestriction(Particle parent) throws LightException {
if ( parent == null ) {
throw new LightException("quantum-particle-restrict.23", this);
}
在一个Project中抛出异常并且效果类似于调用“return”,从而返回到紧接调用此方法的位置。
然而,在另一个项目中,我从当前包中完成抛出,并且在此方法之前的点之前达到了一定程度。
它喜欢而不是被赶出酒吧而是被驱逐出境。
我的选择是在try / catch中包装throw但是我想知道为什么这两个项目之间的行为差异?
2009年5月9日 我一直在玩你的建议但我仍然没有解决这个问题。抛出自定义异常的调用似乎在这个特定的项目中似乎没有被调用,无论Exception类是扩展RuntimeException还是Exception。
public class LightException extends Exception {
...etc
public LightException(String errorCode, Object object) {
super(errorCode == null ? null : errorStrings.getString(errorCode));
this.errorCode = errorCode;
this.invalidObject = object;
}
public LightException(String errorCode, Object object, Exception exception) {
this(errorCode, object);
add(exception);
}
...
}
任何想法都赞赏。
答案 0 :(得分:2)
如果不查看调用此方法的代码,就无法确定发生了什么。
也许在一个项目中,异常被捕获而不是在另一个项目中?如果LightException
是未经检查的异常,则可能会发生这种情况。
编辑:
你说(在你原来的问题中):
抛出异常并且...... 立刻回到了原点 在这种方法的地方取得了成功 调用。
唯一可能发生这种情况的实例是调用checkParticleLightRestriction()
的方法包含在try...catch
块中,例如:
try {
checkParticleLightRestriction(particle);
} catch (LightException e) {
// do something with e
}
// this is the point 'immediately succeeding where this method was called'
答案 1 :(得分:0)
异常总是被第一个周围的try / catch块捕获,该块匹配正在抛出的异常的类型。如果try / catch块捕获与异常或其中一个父类型相同类型的异常,则它将匹配。
您的两个项目很可能在调用checkParticleLightRestriction
方法的块中捕获的异常类型不同。
答案 2 :(得分:0)
我的选择是在try / catch中包装throw但是我想知道为什么这两个项目之间的行为差异?
行为没有区别。每当抛出异常时,它都会被捕获
“最近”catch
能够捕获它(靠近堆栈轨迹中的距离定义)。如果你知道你想要捕捉到什么以及在哪里捕捉某些东西,那么就这样说吧。
throw
不是简单的return
声明。
当抛出异常时,控制权从导致异常的代码转移到处理异常的
catch
语句的最近的动态封闭try
子句。
答案 3 :(得分:0)
您的Exception
代码看起来不错。
问题很可能出在调用代码中。两个项目中的调用代码似乎与catch LightException
做了不同的事情。
在一个Project中抛出异常并且效果类似于调用“return”,从而返回到紧接调用此方法的位置。
这里,调用代码可能会吞噬catch块中的异常并继续前进。
然而,在另一个项目中,我从当前包中完成抛出,并且在此方法之前的点之前达到了一定程度。
在这种情况下,可能会捕获异常,可能包含在RuntimeException
中,然后从catch块中重新抛出。这会将异常传播到堆栈中,然后由一般处理异常的代码处理。
如果不知道如何调用此方法,则无法添加更多内容。如果您可以访问这些不同项目的代码,则可以确认不同的处理技术。
答案 4 :(得分:0)
我为所有在这个问题上绞尽脑汁的人道歉。我有错。它涉及由于没有找到URL问题导致链上的资源丢失。
我会纠正这一点,希望所有人都能解决。