Можно ли добавить методы в java.lang.String?

Я читал некоторые статьи об аспекте, я знаю, что это может улучшить классы, что привлекательно. У меня очень глупый вопрос, на который я не могу найти четкого ответа:

Может ли аспект добавить методы в java.lang.String?

Или аналогичный вопрос: если я не могу получить исходники некоторых классов, могу ли я улучшить их с помощью аспектов?


person Freewind    schedule 02.07.2011    source источник


Ответы (3)


Нет, ты не можешь сделать это, мой друг.

Я думаю, это то, что вы ищете Тип, недоступный пользователю

Дополнительные сведения см. в Руководстве по среде разработки AspectJ. #Особые случаи

Как говорится

Следующие классы не доступны для инфраструктуры LTW независимо от используемых файлов aop.xml.

  • Все классы org.aspectj.* (и подпакеты) — так как они нужны самой инфраструктуре
  • Все классы java.* и javax.* (и подпакеты)
  • Все классы sun.reflect.* — поскольку это специальные классы JDK, используемые при вызовах рефлексии.
person Kowser    schedule 09.07.2011
comment
Этот ответ относится только к LTW. - person selig; 05.07.2013

Я просто искал что-то еще и наткнулся на этот вопрос. Я хочу указать, что ответ Ковсера, хотя и был принят, несколько неверен. В вопросе не упоминается никаких ограничений для LTW, поэтому CTW все еще участвует в гонке. Можно объединить файлы классов JDK/JRE, а затем добавить рекомендованные классы к пути загрузочного класса на более позднем этапе. Я делал это раньше (даже именно то, что просили, то есть объявление нового метода внутри String), и это работает без проблем.

person kriegaex    schedule 26.08.2012

Я ни в коем случае не эксперт по аспектам, но я верю, что вы можете делать обе эти вещи.

Чтобы добавить методы в класс или даже заставить его реализовать новый интерфейс и предоставить реализацию через аспект, я думаю, вам нужно объявления между типами.

AspectJ выполняет свою работу путем манипулирования байт-кодом, поэтому вам не нужен доступ к исходному коду классов, которые вы изменяете.

person Don Roby    schedule 02.07.2011