考慮下面的代碼:如何在始終拋出方法後檢測死代碼?
@Test
public void testDeadCode() {
letsThrow();
System.out.println("will never be reached");
}
private final void letsThrow() {
throw new RuntimeException("guess you didnt see this one coming");
}
在我看來絕對不可能的println()一樣都不會被執行 - 因爲調用letsThrow()將總是拋出異常。
因此我
一)意外的是,編譯器不能告訴我,「這是死代碼」
B)如果有一些編譯器標誌(或者Eclipse設置),這將導致疑惑告訴我:你在那裏得到了死碼。
想象一下在'letsThrow()'方法中有很多內部方法調用的情況,但代碼要複雜得多。你是否要求編譯器檢查這種情況下的死代碼?編譯器不是全能的。 – SimY4
最好的方法是徹底的單元測試和三葉草代碼覆蓋率檢查,它會告訴你哪些代碼永遠不會執行 – Kode
@Vwin不是真的。使我問的代碼看起來像是catch(無論w){tuneAndRethrow(w);拋出Bla(w); }'所以只有一行死代碼。這意味着我需要接近100%的覆蓋率才能找到這些地方。聽起來不像是對我的真正計劃。 – GhostCat