StackTrace:StackTraceElement自定义

时间:2013-01-21 12:18:44

标签: java stack-trace

我想自定义 StackTraceElement class的哈希码。我的问题是如何使用这个新的自定义类而不是JVM的默认StackTraceElement类。

2 个答案:

答案 0 :(得分:2)

  

我想通过扩展它来自定义StackTraceElement类

StackTraceElementfinal,因此无法延长。

如果您(出于某种原因)想要自定义打印堆栈跟踪的方式,您可以实现一个实用程序方法,该方法接受Throwable,然后使用StackTraceElement中的各种方法创建您的自己的布局,如

public static void printCustomizedTrace(Throwable t) {
   for(StackTraceElement e : t.getStackTrace()) {
      System.err.println(" => " + e.getFileName() + ":" + e.getLineNumber());
   }
}

您还可以使用委派并创建CustomStackTraceElements列表,并在hashmap()类中实现其他逻辑(如不同的CustomStackTraceElement):

public static List<CustomStackTraceElement> getCustomizedStackTrace(Throwable t) {
   List<CustomStackTraceElement> result = new ArrayList<>();

   for(StackTraceElement e : t.getStackTrace()) {
      result.add(new CustomStackTraceElement(e));
   }

   return result;
}

答案 1 :(得分:0)

StackTraceElement是一个最终类。最后的课程不能延长。

查看this adn this