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:

JAVA:
  1. String className = "br.com.pedrogoncalves.flex.Classe";
  2. Class clazz = Class.forName(className);
  3. Object obj = clazz.newInstance();

O semelhante a isso no flex seria:

Actionscript:
  1. var obj:Object;
  2. var className:String = "br.com.pedrogoncalves.flex.Classe";
  3. var clazz:Class = Class(getDefinitionByName(className));
  4. obj= new clazz();

Estranho não? Mas enquanto a adobe não faz algo melhor, é conformar com isso ai mesmo!

Até!

Information and Links

Join the fray by commenting, tracking what others have to say, or linking to it from your blog.


Other Posts
Dica: Fazer consulta ignorando acentos no mysql
FLEX: Reflexão com ActionScript 3

Write a Comment

Take a moment to comment and tell us what you think. Some basic HTML is allowed for formatting.

Reader Comments

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.