2016-09-26 92 views
2

使用API​​ 17處理Android應用程序,並且當前需要執行一些反射才能完成任務。 ReflectiveOperationException僅適用於API 19及更高版本,但這很好,因爲我可以簡單地捕獲每個異常。有沒有辦法抑制「catch分支相同」警告?無法在此實例中使用多捕獲

問題是,當我這樣做,我得到一個警告說catch分支是相同的,可以使用多捕獲(或使用異常,我想避免)。但是,當我將捕獲作爲多捕獲,我得到的錯誤說我不能使用ReflectiveOperationException類,因爲不是API 19.

簡而言之,我只想壓制警告,但wasn'牛逼能發現,除了只是在做@SuppressWarning(「全」)

爲背景,這裏的警告/錯誤匹配任何內容:

// 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); 
} 

編輯:添加了所有我正在處理漁獲物,原來只有兩個

+0

奇怪的漁獲-22。 – chrylis

回答

8

@SuppressWarnings("TryWithIdenticalCatches")應該這樣做。

+0

哇這麼簡單,爲什麼我找不到它......謝謝 – jak10h

1

爲了抑制certai發生n次警告我有一個效用函數是這樣的:

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

所以,你可以把它扔,從而使兩個catch條款不相等的前饋e這個get()功能。

+0

我看到,作爲一種解決方法,我可以得出它會使兩個表述不相等,但是當它超過兩個時會發生什麼?我會編輯我的帖子,因爲我實際上處理了兩個以上的異常(但是RelectiveOperationException的所有子類) – jak10h

+0

好吧,編譯器不知道'get()'是否有任何副作用,所以它可能會關閉如果你使用'get()',不管分支是否相同。如果沒有,那麼你可以做'get(get(e))',或者你可以在每個'catch'語句中添加一個不同的N的'get(N);'。 –

相關問題