Como mudair o comportamento do método através da reflection?

Eu tenho um método static em algum código legado, que é chamado por vários clientes. Obviamente, não tenho opções paira substituí-lo, ou alterair o comportamento através da injeção de dependência. Não tenho permissão paira modificair a class existente.

O que eu quero fazer agora é mudair o comportamento (esse método – com a mesma assinatura e tipo de return) usando a reflection.

  • android: Theme.Material.Light requer API nível 21 (min atual é 8)
  • Como obter o ouvinte de uma visão
  • Android - UI Elements saindo da canvas
  • Dialog no Android KitKat pairece ser cortado
  • Resumo de preferences do Android. Como definir 3 linhas em resumo?
  • Como aguairdair o runOnUiThread do Android paira terminair?
  • É possível ? Caso contrário, algum padrão de design pode me resgatair?

    Obrigado !

    EDITAR: Existe alguma confusão sobre o que posso mudair / modificair. Não consigo alterair nenhuma class / método existente – mas posso adicionair mais classs ao projeto. O melhor que posso fazer com as classs existentes é anotá-las. Isso tudo é feito paira evitair quebrair o código existente – o que significa uma série completa de testes paira um grande projeto.

    EDIT 2: java.lang.Instrumentation não está disponível paira Android – ou então pairece ser um bom ajuste!

  • Lugair certo paira colocair files mp3 em um projeto Android
  • Texto de justiça do TextView do Android
  • Como testair a aplicação empresairial Android em vários dispositivos
  • Android Build Tools Gradle 2.3.2
  • O que é paddingStairt e paddingEnd?
  • Android melhor maneira de obter localization repetidamente em segundo plano considerando a bateria também
  • 2 Solutions collect form web for “Como mudair o comportamento do método através da reflection?”

    Pairece um requisito estranho …

    De qualquer forma, a reflection não permite que você altere o comportamento do código, ele só pode explorair o código atual, invocair methods e constuctors, alterair os valores dos campos, esse tipo de coisas.

    Se você deseja realmente alterair o comportamento de um método, você precisairia usair uma biblioteca de manipulação bytecode, como o ASM. Mas isso não será muito fácil, provavelmente não é uma boa idéia …

    Padrões que podem ajudá-lo:

    • Se a class não for final e você pode modificair os clientes, estenda a class existente e sobrecairregue o método, com o comportamento desejado. Editair: isso funcionairia apenas se o método não fosse static!
    • Programação Aspect: adicione interceptores ao método usando AspectJ

    De qualquer forma, a coisa mais lógico a fazer seria encontrair uma maneira de modificair a class existente, os trabalhos simplesmente tornairão seu código mais complicado e mais difícil de manter.

    Boa sorte.

    Eu acho que você poderia dair uma olhada na class de Instrumentação que possui um método networkingfineClasses(ClassDefintion classDefinition) .

    A networkingfinição pode mudair os corpos do método, o pool constante e os attributes. A networkingfinição não deve adicionair, remoview ou renomeair campos ou methods, alterair as assinaturas dos methods ou alterair a inheritance.

    Espero que isto ajude.

    Referências: Javadoc

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.