2013-08-14 5 views
3

При попытке классов приборов, таких как java.util.ArrayList, я получал java.lang.instrument.UnmodifiableClassException.Какие классы не поддаются изменению и не могут быть проинструктированы, и есть ли способ обойти его?

вы можете проверить, может ли класс быть модифицируемым, используя Instrumentation.isModifiableClass().

Мой вопрос:

  1. Какие классы не modifable? Как это определяется.
  2. Есть ли способ обойти это?

Кстати, я не получил этого исключения при работе с HotSpot или Jrocking, только с IBM JVM.

Спасибо, Гилад

ответ

3

Вы должны позвонить isModifiableClass на вашей аппаратуре

boolean isModifiableClass(Class<?> theClass) 

Look here for the reference

Определяет, является ли изменяемым с помощью ретрансформации или переопределения класса. Если класс модифицируется, этот метод возвращает true. Если класс не модифицируется, этот метод возвращает false. Для класса, подлежащего ретрансляции, isRetransformClassesSupported() также должен быть правдой. Но значение isRetransformClassesSupported() не влияет на значение, возвращаемое этой функцией. Для переопределенного класса isRedefineClassesSupported() также должен быть правдой. Но значение isRedefineClassesSupported() не влияет на значение, возвращаемое этой функцией.

Примитивные классы (например, java.lang.Integer.TYPE) и классы массивов никогда не изменяются.

+0

Благодарим за ответ. Да, это то, что я делаю. Мой вопрос заключается в том, что определяет, является ли класс немодифицированным, и если есть способ обойти его ... – Gilad

+0

Я не вижу способа обойти его. Я предполагаю, что JVM поддерживается так, что вы не можете изменять все настройки. – Tala

 Смежные вопросы

  • Нет связанных вопросов^_^