4

当尝试仪器类时java.util.ArrayList,我得到了java.lang.instrument.UnmodifiableClassException.

你可以检查一个类是否可以使用Instrumentation.isModifiableClass().

我的问题是:

  1. 哪些类是不可修改的?它是如何确定的。
  2. 有没有办法绕过这个?

顺便说一句,我在使用 HotSpot 或 Jrocking 时没有遇到此异常,仅使用 IBM JVM。

谢谢,吉拉德

4

1 回答 1

3

你应该调用isModifiableClass你的仪器

boolean isModifiableClass(Class<?> theClass)

在这里寻找参考

确定一个类是否可以通过重新转换或重新定义来修改。如果类是可修改的,则此方法返回 true。如果类不可修改,则此方法返回 false。 对于要重新转换的类,isRetransformClassesSupported() 也必须为真。但是 isRetransformClassesSupported() 的值不影响这个函数的返回值。对于要重新定义的类,isRedefineClassesSupported() 也必须为真。但是 isRedefineClassesSupported() 的值不影响这个函数的返回值。

原始类(例如 java.lang.Integer.TYPE)和数组类永远不可修改。

于 2013-08-14T09:50:17.540 回答