簡體   English   中英

如何覆蓋外部庫的方法?

[英]How to override a method of an external library?

我想抑制特定異常的堆棧跟蹤:org.everit.json.schema.ValidationException。

這個特殊的異常在我們的應用程序中被拋出很多,我想限制性能損失。

我嘗試用自己的擴展它:

public class SuppressValidationException extends ValidationException {

  public SuppressEveritValidationException(Schema violatedSchema,
      Class<?> expectedType, Object actualValue) {
    super(violatedSchema, expectedType, actualValue);
  }

  public SuppressEveritValidationException(Schema violatedSchema, Class<?> expectedType,
      Object actualValue, String keyword) {
    super(violatedSchema, expectedType, actualValue, keyword);
  }

  @Override
  public Throwable fillInStackTrace() {
    return this;
  }
}

但是當我捕獲 SuppressValidation 時,ValidationException 未被捕獲。 有沒有辦法實現我想要做的事情?

您可以圍繞這個實際拋出此異常的外部庫的 class 編寫一個簡單的包裝器,只需將任何方法調用傳遞給具有相同名稱的方法,並在適當的情況下捕獲異常並重新拋出一個更簡單的版本。

此外,您是否實際記錄堆棧跟蹤也將取決於您的日志記錄框架,並且它可能也可以配置為不這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM