gpt4 book ai didi

java - 解析 DBXException java 的最佳方法

转载 作者:行者123 更新时间:2023-11-30 06:21:16 28 4
gpt4 key购买 nike

所以我最近问了如何处理 Dropbox API 异常的问题 here 。我了解到我必须将 DBXEception 解析为它的 subclasses其中有很多。现在考虑到这一点,我想知道处理这个问题的最佳方法是什么。

目前,我计划使用instanceof并像这样检查,如果我希望程序再次尝试,它将返回true,并且程序可能会通过服务器请求的指数退避再次尝试

public boolean parseDBX(DbxException e)
{
if(e instanceof AccessErrorException) {//handle Error

}else if (e instanceof DbxApiException) {//handle Error

}etc
}

它将在像这样的 catch block 中被调用

for(int i =0;;i++) { 
try {
ListFolderResult result = client.files().listFolder("/Saves/"+prefName);
while (true) {
for (Metadata metadata : result.getEntries()) {
System.out.println(metadata.getPathLower());
//metadata.
}

if (!result.getHasMore()) {
break;
}

result = client.files().listFolderContinue(result.getCursor());
}
} catch (ListFolderErrorException e) {
createDefFolder();
} catch (DbxException e) {

if(codeHandler.parse(e)&&i<10) {
continue;
}else {
log.write("Error 5332490: a problem was encountered while trying to check for the root file"+e.getMessage());
throw new IOException();
}


}
}

所以我的问题是有没有办法使用 switch 语句来代替(据我所知,答案是否定的),如果没有,是否有更好的方法来处理异常类型的检查。

最佳答案

最好的方法是通过捕获适当类型的异常来完全避免“解析”异常:

try {
...
} catch (AccessErrorException aee) {
...
} catch (DbxApiException dae) {
...
}

如果不希望这样做,您可以将自己的整数 ID 与每个异常类型相关联,将其放入 Map 中,然后在 parse 方法中使用它来区分 switch 中的子类型:

static Map<Class,Integer> parseId = new HashMap<>();
static {
parseId.put(AccessErrorException.class, 1);
parseId.put(DbxApiException.class, 2);
...
}
...
public void parseDBX(DbxException e) {
Integer id = parseId.get(e.getClass());
if (id != null) {
switch (id.intValue()) {
...
}
}
}

关于java - 解析 DBXException java 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48102124/

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