2 Stimmen

Wie kann man wissen, auf welche Klasse ein Klassenobjekt verweist?

Wir haben das Klassenobjekt (ein Objekt, das auf eine Klasse verweist), so dass Sie Objekte aus diesem Klassenobjekt erstellen können:

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

Nun möchte ich wissen, auf welches Objekt sich die classObject . Zum Beispiel:

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);

Das funktioniert, aber was ist, wenn ich ein Klassenobjekt übergebe, das nicht auf AClass ? Ich möchte wissen, ob dies der Fall ist und etwas dagegen unternehmen.

--- EDIT ---

Bei der Suche habe ich diese Funktion gefunden

flash.utils.getQualifiedClassName(value:*):String Diese Funktion gibt den Namen der Klasse zurück, zum Beispiel:

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'

Ich muss also nur noch die Ergebnisse dieser Funktion vergleichen:

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 ---

Eine andere Methode ist die Verwendung der Konstruktoreigenschaft der Klasse Object:

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();
}

1voto

Lucas Gabriel Sánchez Punkte 37339

Ich habe herausgefunden, dass die einfachste (ich weiß nicht, ob es die schnellste) Möglichkeit, diese Aufgabe zu erfüllen, im folgenden Beispiel zu finden ist:

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;
}

Dies funktioniert auch, wenn AClass ist eine Schnittstelle.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X