2013-07-13 82 views
3

假設我已經定義了一個庫app一些類:是否有可能通過名稱獲得課堂鏡像?

library app; 

class User { 
    // some members 
} 
class Question {} 
class Answer {} 

是否有可能獲得類name指定的鏡子?

var className = specifyClassName(); // may be "User", "Question", etc 
ClassMirror cm = getClassMirror(className); 

回答

4

以下是您的要求的可能示例。

library app; 

import 'dart:mirrors'; 
import 'dart:async'; 

void main() { 
    var names = [ 
    'dart.async.Future', 
    'dart.mirrors.ClassMirror', 
    'app.User', 
    'app.Question', 
    'Answer', 
    'app.Stackoverflow' 
    ]; 

    for(var name in names) { 
    var clazz = getClassMirrorByName(name); 
    print('$name: $clazz'); 
    } 
} 

ClassMirror getClassMirrorByName(String className) { 
    if(className == null) { 
    return null; 
    } 

    var index = className.lastIndexOf('.'); 
    var libname = ''; 
    var name = className; 
    if(index > 0) { 
    libname = className.substring(0, index); 
    name = className.substring(index + 1); 
    } 

    LibraryMirror lib; 
    if(libname.isEmpty) { 
    lib = currentMirrorSystem().isolate.rootLibrary; 
    } else { 
    var libs = currentMirrorSystem().findLibrary(new Symbol(libname)).toList(); 
    if(libs.length == 1) { 
     lib = libs.first; 
    } 
    } 

    if(lib == null) { 
    return null; 
    } 

    return lib.classes[new Symbol(name)]; 
} 

class User { 
    // some members 
} 
class Question {} 
class Answer {} 

輸出:

dart.async.Future: ClassMirror on 'Future' 
dart.mirrors.ClassMirror: ClassMirror on 'ClassMirror' 
app.User: ClassMirror on 'User' 
app.Question: ClassMirror on 'Question' 
Answer: ClassMirror on 'Answer' 
app.Stackoverflow: null 
+0

非常感謝你非常回答我的這麼多問題:) – Freewind

相關問題