Java - метод Invoke неявно (Reflection?) [Duplicate]

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

Здесь ресурс означает «идентификатор» макета, который вы используете при создании экземпляра.

Теперь этот макет имеет много дочерних представлений со своими идентификаторами. Таким образом, textViewResourceId сообщает, какое дочернее представление нужно заполнить данными.

11
задан m0skit0 11 September 2012 в 15:47
поделиться

4 ответа

Вы рассматривали аспектно-ориентированное программирование и, возможно, AspectJ ? Здесь здесь и здесь для информации AspectJ / Android.

11
ответ дан Brian Agnew 18 August 2018 в 02:05
поделиться

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

4
ответ дан Bhaskar 18 August 2018 в 02:05
поделиться
  • 1
    Извините, забыл упомянуть об этом: будет ли это работать на Android? – m0skit0 11 September 2012 в 15:49

Использовать класс Java Proxy . Он создает динамические реализации интерфейсов и перехватывает методы, все они отражаются.

Вот учебник .

22
ответ дан Brian 18 August 2018 в 02:05
поделиться
  • 1
    +1 для ответа без внешних зависимостей – Joeri Hendrickx 11 September 2012 в 15:43
  • 2
    Да, я искал Proxy, но во всех примерах я видел, что вам нужно создать экземпляр (например, Foo), используя объект Proxy. В моем случае это неприемлемо. Я не могу изменить приведенный выше примерный код. – m0skit0 11 September 2012 в 15:46
  • 3
    @ m0skit0 Если вы не можете вставить генерацию Proxy перед вызовом метода, тогда вы правы, это решение не будет работать, так как вам нужно заменить экземпляр Foo новым экземпляром Proxy. Извини :) – Brian 11 September 2012 в 16:40
  • 4
    Да, на самом деле класс Proxy должен быть фабрикой Foo. Спасибо за ваш ответ в любом случае :) – m0skit0 11 September 2012 в 17:39

Да, это возможно через AspectJ . Я объясню это с помощью некоторого фрагмента кода:

public Aspect
{
    Object around()call(* Foo.callTheMethod())
    {
        // do your work
        return proceed(); 
    }                       
}
3
ответ дан SachiN Ware. 18 August 2018 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: