[英]How to hide a method from Stacktrace but not its exception?
我正面臨這種情況,我的方法會引發一些異常。 我屏蔽了異常,因此它沒有顯示到底是什么,但是在堆棧跟蹤中也顯示了它來自的方法。
代碼是這樣的:
public Something methodForHiding() throws Exception {
try {
some code
}
catch (Exception e) {
throw ExcpetionMask.maskExep();
}
return Something
}
在堆棧跟蹤中,我得到:
at com.Program.maskedException
at com.Program.methodForHiding
我想從堆棧跟蹤中刪除這個methodForHiding並只留下maskedException
有什么辦法可以做到這一點?
你可以這樣做:
public class CustomException extends Exception{
public CustomException() {
StackTraceElement[] stackTrace = super.getStackTrace();
StackTraceElement[] newArray = Arrays.stream(stackTrace).filter(i -> i.getMethodName().equals("The method to remove"))
.toArray(StackTraceElement[]::new);
super.setStackTrace(newArray);
}
}
在自定義異常的構造函數上,通過調用public void setStackTrace(StackTraceElement[] stackTrace)來編輯堆棧跟蹤。
首先使用public StackTraceElement[] getStackTrace()獲取當前堆棧跟蹤,然后過濾您不希望在堆棧中顯示的方法,並相應地設置新的堆棧跟蹤。
就個人而言,我認為最好不要刪除該方法,而是簡單地將其名稱替換為類似
“從調用堆棧中刪除的方法”
不要誤導那些必須查看堆棧跟蹤以找出錯誤來源的人。
您可以使用Throwable.setStackTrace
執行此操作。 只需傳入一個省略相關元素的數組即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.