Eu poderia fazer tudo isso na classe que eu estava querendo adicionar esse método, mas o problema era que eu só poderia mexer em outra classe que manipulava essa já existente. Então criei um código que adicionava métodos dinamicamente a essa classe.
O código para adicionar o novo método é bastante simples, vou explicá-lo rapidamente.
Na linha 3 eu crio um nome único para a nova classe. Na linha 6 eu verifico se essa classe já existe.
Na linha 7 eu defino a classe e estendo a classe do objeto que eu quero adicionar o novo método.
No construtor da nova classe eu chamo o construtor da classe do objeto que terá o método adicionado para que ele possa ser refeito, por isso que o addMethod sempre deve ser chamado logo após o objeto ser criado, para que ele não perca nenhuma informação.
Na linha 20 é dado um eval na string do código da classe e em seguida é retornado o objeto da nova classe com todas as funcionalidades do objeto passado por parâmetro e mais o novo método.
Na linha 26 é dado um exemplo de como chamar a função addMethod e quais os seus parâmetros. O primeiro é o objeto corrente, o segundo é o nome do método e o terceiro parâmetro é o código do novo método.
Uma dica importante é para se em alguma parte do código for preciso usar uma verificação de qual é o objeto, deve-se usar instanceof e não o is_a, porque o objeto se transformará em outro com as funcionalidades que ele já possuia.
One Response
Wallace
julho 27th, 2011 at 12:36 am
1Uso de “reflexão” (sou java Like mesmo!) não caracteriza uma má modelagem… A exigência de dinamismo de algumas aplicações juntamente com rigidez da linguagem e de padrões de projetos e possiveis ganhos de desempenho fazem dessas ferramentas soluções feias mas não proibitivamente erradas! :D
RSS feed for comments on this post · TrackBack URI
Leave a reply