哪些类是不可修改的,无法修改,有没有办法绕过它?

时间:2013-08-14 09:45:53

标签: java instrumentation internals

在尝试使用java.util.ArrayList等课程时,我得到了java.lang.instrument.UnmodifiableClassException

您可以使用Instrumentation.isModifiableClass()检查某个类是否可修改。

我的问题是:

  1. 哪些课程无法修改?它是如何确定的。
  2. 有没有办法绕过这个?
  3. 顺便说一句,在使用HotSpot或Jrocking时,我没有得到这个例外,只有IBM JVM。

    谢谢, 吉拉德

1 个答案:

答案 0 :(得分:4)

您应该在仪器上调用isModifiableClass

boolean isModifiableClass(Class<?> theClass)

here for the reference

  

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

     

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