2009-09-09 2 views
2

우리는 그래서 당신은 그 클래스 개체에서 개체를 만들 수 있습니다 Class 객체 (클래스를 참조하는 객체)가 :Class 객체가 참조하는 클래스를 확인하는 방법은 무엇입니까?

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을 참조하지 않는 클래스 개체를 전달하면 어떻게됩니까? 나는 이것이 일어나고 있는지를 알고 싶다. 문자열 이 기능은 예를 들어, 클래스의 이름을 반환합니다 :

--- 편집 ---

것은 내가이 기능

flash.utils.getQualifiedClassName (* 값)을 발견 검색

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

그래서, 내가 할 일은 그 함수의 결과를 비교하는 것입니다

는 --- EDIT 2 ---

또 다른 방법은 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(); 
} 

답변

1

내가하는 방법으로 가장 간단한 것은 (그것이 가장 빠른 있는지 모른다) 발견 이 작업은 다음 예제에 달성 : AClass는 인터페이스의 경우

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

이것은 또한 작동합니다.

+1

AClass로 캐스팅하고 null인지 확인하는 대신 왜 'is'연산자를 사용합니까? – Turambar

관련 문제