2013-04-19 1 views

ответ

9

Используйте новую функцию верхнего уровня reflectClass от dart:mirrors.

Вот пример:

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 должно быть что-то вроде:

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

Обратите внимание, что это работает в строй 21753 или выше. Кроме того, это не в настоящее время работа в dart2js пока. Мы планируем поддержать его в dart2js.

+0

Отлично, и с помощью методов расширения было бы еще лучше, т. Е. Вы могли бы: 'String qualifiedName = reflectClass (type) .qualifiedName.getName()' - [let Gilad know!] (Https://code.google. com/p/dart/issues/detail? id = 13) :) – mythz

+0

Каков статус использования типа непосредственно как 'reflectClass (Awesome)'? –

+0

@KaiSellgren: Реализация mirrorClass не имеет значения, получил ли вы объект Type через obj.runtimeType или с помощью литерала типа. Иначе говоря, статус reflectClass (Awesome) должен быть таким же, как и статус mirrorClass ((новый Awesome()). RuntimeType). Если вы испытываете это не так, напишите ошибку на http://dartbug.com. –