在 Java 中你可以做一些你很少看到的事情,通常是因为它没有用处。但是,Java 中有一些不寻常的东西可能会非常有用。
Chronicle Software在其低级库中使用了许多不同的常用模式,大多数开发人员通常不会遇到。
其中之一是扩展 Throwable 但不是错误或异常的类。
StackTrace 扩展了 Throwable
package net.openhft.chronicle.core;
/**
* Throwable created purely for the purposes of reporting a stack trace.
* This is not an Error or an Exception and is not expected to be thrown or caught.
*/
public class StackTrace extends Throwable {
public StackTrace() { this("stack trace"); }
public StackTrace(String message) { this(message, null); }
public StackTrace(String message, Throwable cause) {
super(message + " on " + Thread.currentThread().getName(), cause);
}
public static StackTrace forThread(Thread t) {
if (t == null) return null;
StackTrace st = new StackTrace(t.toString());
StackTraceElement[] stackTrace = t.getStackTrace();
int start = 0;
if (stackTrace.length > 2) {
if (stackTrace[0].isNativeMethod()) {
start++;
}
}
if (start > 0) {
StackTraceElement[] ste2 = new StackTraceElement[stackTrace.length - start];
System.arraycopy(stackTrace, start, ste2, 0, ste2.length);
stackTrace = ste2;
}
st.setStackTrace(stackTrace);
return st;
}
}
一些重要的旁注先让开
- 是的,我确实在我的 IDE 中使用了比例字体。我在 Windows 上使用 Verdana,我很容易习惯并且不想回去。
- 这不是我期望被抛出的课程。检查直接扩展 Throwable 的类,就像 Exception 一样,因此编译器将帮助您执行此操作。
- Throwable