Cargar clases dinámicamente

Para cargar clases dinámicamente en tiempo de ejecución podemos utilizar el método getDefinitionByName del package flash.utils.

Un ejemplo:

import flash.utils.getDefinitionByName;
var strClaseDinamica:String = "ClaseACargar";
var referenciaClase:Class = getDefinitionByName(strClaseDinamica);
var instancia:* = new referenciaClase();

Un par de puntualizaciones:

- Cuando se quiere cargar una clase dinámicamente hay que utilizar la ruta completa incluyendo el package (su full qualified name) aunque la clase cargadora se encuentre en el mismo sitio que la que carga.

- Una limitación que tiene este método (bastante grande a mi parecer) es que al compilar no se incluyen las clases a las que no se les hace referencia directa. Esto quiere decir que para que el ejemplo anterior funcione, en alguna parte del código, como mínimo, deberemos declarar una instancia de esta clase (aunque la igualemos a null):

var instancia:ClaseACargar = null;

En breve comentaré una buena práctica para evitar el "no-tipado" que se hace en la última línea del ejemplo anterior.


About this entry