gpt4 book ai didi

java - Java中catch block 中return的奇怪问题

转载 作者:行者123 更新时间:2023-12-01 05:43:47 26 4
gpt4 key购买 nike

我使用的 try/catch block 遇到了一个奇怪的问题。我有这个方法,它只是从远程服务获取一些数据并存储它。

public WFSGetCapabilitiesResponse wfsGetCapabilities(String url) {
WFSGetCapabilitiesResponse response = new WFSGetCapabilitiesResponse();

try {
WFSDataStore data = loadWFSCapabilities(url);
String[] typeNames = data.getTypeNames();
ArrayList<WFSFeatureTypeBase> wfsLayers = new ArrayList<WFSFeatureTypeBase>();
for (int i = 0; i < typeNames.length; i++) {
String typeName = typeNames[i];

WFSFeatureTypeBase newLayer = new WFSFeatureTypeBase();
newLayer.setTypeName(typeName);
newLayer.setName(typeName.split(":")[1]);
newLayer.setTitle(data.getFeatureTypeTitle(typeName));
newLayer.setAbstract(data.getFeatureTypeAbstract(typeName));
newLayer.setServiceUrl(url.split("\\?")[0]);

wfsLayers.add(newLayer);
}
response.setWFSLayers(wfsLayers);
} catch (IOException e) {
response.setError(WCSCapabilitiesResponse.IO_EXCEPTION);
response.setErrorMessage(e.getMessage());
response.setSuccessful(false);
e.printStackTrace();
return response;
}
return response;
}

如果我运行这段代码,我会得到一个空指针异常(“数据”为空,但并不知道它是否相关)。但是,如果我从 catch block 中删除 return 语句,一切都会很好。

奇怪的是,这两种情况都没有捕获 IOException,所以我不明白为什么它会产生如此大的影响。

再说一次,在 catch block 中返回它不起作用,没有它它就起作用......我真的不明白为什么会发生这种情况。

有什么想法吗?

最佳答案

嗯,我的第一个想法是,catch block 在抛出 IOException 时才起作用 - 所以我们确定那件事正在发生。同样,我们知道如果没有 catch block ,此异常将从 wfsGetCapability 方法传播出去(大概您在删除 catch block 时添加了适当的 throws 声明)。

因此,在“工作”情况下,调用代码可能会捕获更高层的 IOException 并以某种方式处理它,使您的方法根据输出判断似乎可以工作。当然,您的方法不起作用,并引发了异常,但也许有一个在错误情况下调用的默认回退(或类似)?

这就是希望能够解决的“奇怪”部分。至于“问题”部分,如果您在使用 catch block 时抛出 NullPointerException,但没有它,则很明显您的 catch block 逻辑不太正确并导致了此问题。从您发布的内容来看,这些直接引用中的任何一个都不会为空 - 查看堆栈跟踪并确定从哪一行抛出异常,然后像修复任何其他 NPE 一样修复它。 p>

关于java - Java中catch block 中return的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6453261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com