2013-04-19 13 views

cevap

9

dart:mirrors adresindeki yeni reflectClass üst düzey işlevini kullanın.

İşte bir örnek:

import 'dart:html'; 
import 'dart:mirrors'; 

class Awesome { 
    // ... 
} 

void main() { 
    var awesome = new Awesome(); 
    Type type = awesome.runtimeType; 
    ClassMirror mirror = reflectClass(type); 
    Symbol symbol = mirror.qualifiedName; 
    String qualifiedName = MirrorSystem.getName(symbol); 

    query('#name').text = qualifiedName; 
} 

qualifiedName şey gibi olmalıdır:

http://127.0.0.1:3030/Users/sethladd/dart/type_name/web/type_name.dart.Awesome 

Not bu 21753 veya daha yüksek inşa çalışır. Ayrıca, bu şu anda dart2js içinde çalışmıyor. Bunu dart2js'de desteklemeyi planlıyoruz.

+0

Harika ve uzantı yöntemleriyle daha da iyi olurdu, örneğin: 'String nitdeAdı = reflectClass (type) .qualifiedName.getName()' - [Gilad'ı tanıyalım!] (Https://code.google. com/p/dart/issues/detail? id = 13) :) – mythz

+0

Doğrudan "reflectClass (Awesome)" gibi bir tür kullanma durumu nedir? –

+0

@KaiSellgren: reflectClass uygulamasının, object nesnesini object.runtimeType aracılığıyla aldığınızdan veya yazım türünü kullanıp kullanmadığına aldırış etmemesi. Başka bir deyişle, reflectClass (Awesome) durumu, reflectClass'ın durumuyla aynı olmalıdır ((yeni Awesome()). RuntimeType). Bu durumun yaşanmaması durumunda, lütfen http://dartbug.com adresinden bir hata gönderin. –

İlgili konular