FLEX: Instanciar objeto a partir da classe
Quando desenvolve-se componentes genéricos em FLEX, é necessário, muitas vezes fazer instâncias de objetos em runtime, porém nem sempre esta instância está a disposição. Depois de quase 2 anos e meio trabalhando com java, ao migrar para o action script 3, senti uma grande falta da API de Reflection que temos lá, quem é considerávelmente completa.
Então a reflexão possui 3 princípios básicos. O primeiro descobrir a classe do objeto, o segundo instânciar e terceiro utilizar de maneira genérica.
O primeiro passo foi descrito num post anterior: http://pedrogoncalves.com.br/2008/07/07/flex-reflexao-com-actionscript-3/
Utilizando-se do código do post anterior, vamos a como instanciar em runtime um objeto.
Em java fazemos algo do tipo:
O semelhante a isso no flex seria:
-
var obj:Object;
-
var className:String = "br.com.pedrogoncalves.flex.Classe";
-
var clazz:Class = Class(getDefinitionByName(className));
-
obj= new clazz();
Estranho não? Mas enquanto a adobe não faz algo melhor, é conformar com isso ai mesmo!
Até!



Fala Pedro… blz? To passando por aqui pra dar uma visitada.. faz dias q nao passo :D.
Realmente reflexão em ActionScript é um parto para nós q acostumamos a utilizar esse recurso em Java.
Bem.. além do describeType e do getDefinitionByName, outros métodos acessórios que ajudam para trabalhar com reflexão em AS são:
- getQualifiedClassName
- getQualifiedSuperclassName
Alem disso, quando temos um objeto em mãos, e queremos saber suas propriedades, podemos usar o hasOwnProperty ou ainda o operador “in”.
Então, com esses recursos em mãos e um pouquinho a mais de linhas, dá pra ter uma boa “flexibilidade” ao trabalhar com reflexao em AS… mas ainda assim, não dá pra comparar com Java.
Um abraço mano.