2013-04-19 13 views

Odpowiedz

9

Użyj nowej funkcji najwyższego poziomu reflectClass od dart:mirrors.

Oto przykład:

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 powinno być coś takiego:

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

Uwaga, to działa w budowę 21753 lub wyższej. Co więcej, to jeszcze nie pracuje w dart2js w postaci obecnie. Planujemy go wspierać w dart2js.

+0

Świetne i z metodami rozszerzenia byłoby jeszcze lepiej, tzn. Mógłbyś: 'String qualifiedName = reflectClass (type) .qualifiedName.getName()' - [niech Gilad wie!] (Https://code.google. com/p/dart/issues/detail? id = 13) :) – mythz

+0

Jaki jest status korzystania z typu bezpośrednio jak 'reflectClass (Awesome)'? –

+0

@KaiSellgren: Implementacja reflectClass nie obchodzi, czy otrzymałeś obiekt Type poprzez obiekt obj.runtimeType lub używając literału typu. Inaczej mówiąc, status reflectClass (Awesome) powinien być taki sam jak status reflectClass ((nowy Awesome()). RuntimeType). Jeśli tego nie zrobisz, zgłoś błąd na stronie http://dartbug.com. –

Powiązane problemy