2013-04-19 9 views

risposta

9

Utilizzare la nuova funzione di primo livello reflectClass da dart:mirrors.

Ecco un esempio:

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

Il qualifiedName dovrebbe essere qualcosa di simile:

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

Nota, questo funziona in costruzione 21753 o superiore. Inoltre, questo non è attualmente funziona ancora in dart2js. Abbiamo in programma di supportarlo in dart2js.

+0

Grande e con i metodi di estensione sarebbe ancora meglio, cioè si potrebbe avere: 'String qualifiedName = reflectClass (type) .qualifiedName.getName()' - [lascia che Gilad lo sappia!] (Https://code.google. com/p/dart/issues/detail? id = 13) :) – mythz

+0

Qual è lo stato dell'utilizzo di un tipo direttamente come 'reflectClass (Awesome)'? –

+0

@KaiSellgren: L'implementazione di reflectClass non interessa se si è ottenuto l'oggetto Type tramite obj.runtimeType o utilizzando il tipo letteral. In altre parole, lo stato di reflectClass (Awesome) dovrebbe essere lo stesso di reflectClass ((new Awesome()). RuntimeType). Se si verifica questo non è il caso, si prega di file un bug all'indirizzo http://dartbug.com. –

Problemi correlati