有没有办法抑制 "catch branch identical" 警告?无法在此实例中使用多捕获

Is there a way to suppress the "catch branch identical" warning? Unable to use multi catch in this instance

与 API 17 一起开发 android 应用程序,目前需要做一些反思才能完成任务。 ReflectiveOperationException 仅适用于 API 19 及更高版本,但这很好,因为我可以简单地单独捕获每个异常。

问题是当我这样做时,我收到一条警告,说 catch 分支是相同的并且可以使用 multi-catch 编写(或使用我想避免的 Exception)。但是当我将 catch 写为 multi-catch 时,我收到错误消息说我不能使用 ReflectiveOperationException class 因为不是 API 19.

简而言之,我只想抑制警告,但除了执行 @SuppressWarning("all")

之外找不到任何匹配的内容

对于上下文,这里是 warnings/errors:

// Error: "Multi-catch with these reflection exceptions requires API level 19 (current min is 15) 
// because they get compiled to the common but new super type ReflectiveOperationException.
// As a workaround either create individual catch statements, or catch Exception."
try {
    return someMethodThatThrowsExceptions();
} catch (InstantiationException | IllegalAccessException e) {
    throw new RuntimeException(e); 
}

// Warning: 'catch' branch identical to 'InstantiationException | IllegalAccessException' branch"
try {
    return someMethodThatThrowsExceptions();
} catch (InstantiationException e) {
    throw new RuntimeException(e); 
} catch (IllegalAccessException e) {
    throw new RuntimeException(e); 
} catch (NoSuchMethodException e) {
    throw new RuntimeException(e); 
} catch (InvocationTargetException e) {
    throw new RuntimeException(e); 
} 

编辑:添加了我正在处理的所有渔获物,原来只有两个

为了抑制某些警告,我有一个实用函数是这样的:

public static <T> T get( T value )
{
    return value;
}

因此,您可以在抛出之前将 e 提供给此 get() 函数,从而使两个 catch 子句不相等。

@SuppressWarnings("TryWithIdenticalCatches") 应该可以解决问题。