2009-09-09 3 views
2

У нас есть объект класса (объект, который ссылается на классе), так что вы можете создавать объекты из этого объекта класса:Как узнать, на какой класс ссылается объект класса?

var classObject:Class = package.to.class.AClass; 
var objectFromClass:AClass = new classObject(); 

Теперь, я хочу знать, какой объект ссылается classObject. Например:

function Creator(classObject:Class):AClass 
{ 
    // here I want to know what class is referenced by classObject 
    return new classObject(); 
} 

var classObject:Class = package.to.class.AClass; 
var objectFromClass:AClass = Creator(classObject); 

Это работает, но что, если я передать объект класса, который не ссылается на AClass? Я хочу знать, если это произойдет и что-то с этим поделать.

--- EDIT ---

Поиск Я нашел эту функцию

flash.utils.getQualifiedClassName (значение: *): String Эта функция возвращает имя класса, например:

var name:String = ''; 
// name = '' 

name = flash.utils.getQualifiedClassName(package.to.class.AClass); 
// name = 'AClass' 

name = '' 
// name = '' 

var anInstance:AClass = new AClass(); 
name = flash.utils.getQualifiedClassName(anInstance); 
// name = 'AClass' 

Таким образом, все, что нужно сделать, это сравнить результаты этой функции:

function Creator(classObject:Class):AClass 
{ 
    var anInstance:AClass = new AClass(); 
    var className:String = flash.utils.getQualifiedClassName(anInstance); 
    var classObjectName:String = flash.utils.getQualifiedClassName(classObject); 

    // here className and classObjectName are 'AClass' :) 
    if (className != classObjectName) 
     throw new Error('The classes are different'); 

    return new classObject(); 
} 

var classObject:Class = package.to.class.AClass; 
var objectFromClass:AClass = Creator(classObject); 

--- EDIT 2 ---

Другой метод состоит в использовании конструктора свойство класса объектов:

function Creator(classObject:Class):AClass 
{ 
    var tempInstance:AClass = new AClass(); 
    var tempClassObject:Class = Object(tempInstance).constructor; 

    if (classObject != tempClassObject) 
     throw new Error('The classes are different'); 

    return new classObject(); 
} 

ответ

1

Я обнаружил, что самый простой (не знаю, если это самый быстрый) способ выполнить эту задачу в следующем примере:

function Creator(classObject:Class):AClass 
{ 
    var anInstance:Object = new classObject() as AClass; 
    if (anInstance == null) 
     throw new Error('The classes are different'); 

    return new classObject(); // or return anInstance as AClass; 
} 

Это также работает, если AClass является интерфейсом.

+1

Вместо того, чтобы отправлять в AClass и проверять, является ли он нулевым, почему бы не использовать оператор 'is'? – Turambar

Смежные вопросы