2013-09-24 1 views
1

다른 개체의 인스턴스를 만드는 개체가 필요합니다. ,다트의 동적 인스턴스화

class Cloner{ 

    BaseType prototype; 

    BaseType getAnother(){ 
    BaseType newthing = prototype.clone(); //but there's no clone() in Dart 
    newthing.callsomeBaseTypeMethod(); 
    return newthing; 
    } 
} 

를 따라서 : 나는 객체의 클래스를 전달하는 능력이 생성되고 싶어하지만, 그들은 모두 같은 유형이 필요하고, 그들은 모두 같은 값으로 시작 수 있다면 그것은 좋은 것입니다 프로토 타입은 BaseClass 유형의 객체로 설정 될 수 있습니다. 클래스의 유형이 BaseClass의 서브 클래스 인 경우에도 마찬가지입니다. 미러 라이브러리로이 작업을 수행 할 수있는 방법이있을 것이라고 확신합니다.하지만 확실한 기본 제공 방법을 빠뜨리지 않도록하고 싶었습니다.

generic : Cloner<T>으로 어떻게 설정했는지 알 수 있었지만 컴파일 타임에 T가 BaseType의 하위 유형인지 확인할 수있는 방법이 없습니다. 맞습니까?

답변

0

새 인스턴스를 반환하는 작은 "생성자"함수를 만들면 시작할 수 있습니다. 이것을 시도하십시오 :

typedef BaseType Builder(); 

class Cloner { 
    Builder builder; 

    Cloner(Builder builder); 

    BaseType getAnother() { 
    BaseType newthing = builder(); 
    newthing.callsomeBaseTypeMethod(); 
    return newthing; 
    } 
} 

main() { 
    var cloner = new Cloner(() => new BaseType()); 
    var thing = cloner.getAnother(); 
} 

위의 코드에서 우리는 typedef를 작성하여 BaseType을 리턴하는 함수를 정의합니다.

+0

아 멋지다! 나는 그 typedef가 조만간 유용 할 것이라는 것을 알았다. 감사! – pseudopeach

+0

아마도 다른 방법이있을 수 있습니다. 희망이 당신을 위해 작동합니다. –