如何覆盖 Java API 中的 类,从而使用反射改变它们的行为?
How to override classes in the Java API, thus changing their behaviour using Reflection?
是否可以覆盖异常 class 并将我自己的方法注入其中,从而改变它的整体行为。我相信我在某处读到可以使用自定义 class 加载器或一些反射技术来完成?我认为它提到使用自定义 class 加载程序来加载自定义 class 而不是加载默认 Java API class。如果是这样,人们如何做到这一点,例如,在调用 printStackTrace(e) 时创建一个 JOptionPane 异常消息弹出窗口,提醒用户异常消息。
以 java
开头的包中的 类 受到 JVM 本身的保护,因此为了能够更改这些包中的 classes,您需要的不仅仅是一个不同的 class 装载机。您可以使用 System.setErr
设置您自己的 PrintStream,而不是采用这种方式,这将打开显示在那里打印的文本的警告框。这不仅包括 printStackTrace
的调用,还包括打印在 STDERR 上的所有内容。如果调用来自 Throwable
或您想要支持的其他 classes,您可以通过检查新创建的异常的调用堆栈跟踪来使用一些过滤并忽略其余部分。
是否可以覆盖异常 class 并将我自己的方法注入其中,从而改变它的整体行为。我相信我在某处读到可以使用自定义 class 加载器或一些反射技术来完成?我认为它提到使用自定义 class 加载程序来加载自定义 class 而不是加载默认 Java API class。如果是这样,人们如何做到这一点,例如,在调用 printStackTrace(e) 时创建一个 JOptionPane 异常消息弹出窗口,提醒用户异常消息。
java
开头的包中的 类 受到 JVM 本身的保护,因此为了能够更改这些包中的 classes,您需要的不仅仅是一个不同的 class 装载机。您可以使用 System.setErr
设置您自己的 PrintStream,而不是采用这种方式,这将打开显示在那里打印的文本的警告框。这不仅包括 printStackTrace
的调用,还包括打印在 STDERR 上的所有内容。如果调用来自 Throwable
或您想要支持的其他 classes,您可以通过检查新创建的异常的调用堆栈跟踪来使用一些过滤并忽略其余部分。