簡體   English   中英

如何在Dart類上獲取ClassMirror?

[英]How do I get a ClassMirror on a Dart class?

如何使用Mirrors API獲得ClassMirror? 我嘗試使用頂級的reflect()函數,但這需要一個類實例,而不是一個類作為參數。

您可以從類的實例,定義類的庫或直接使用類名獲取ClassMirror。

從實例或InstanceMirror獲取類鏡像

要獲取有關類的信息,您需要一個ClassMirror。 要獲取ClassMirror,首先需要一個類的實例,或定義該類的庫的名稱。

如果您有實例,則可以使用dart:mirrors庫中定義的頂級reflectClass()函數。 該函數返回一個ClassMirror對象:

var classMirror = reflectClass(myObj.runtimeType);
MirrorSystem.getName(classMirror.simpleName); // 'MyClass'

如果您有InstanceMirror,請使用InstanceMirror的type屬性獲取ClassMirror:

var myObj = new MyClass();
var instanceMirror = reflect(myObj);
var classMirror = instanceMirror.type;
MirrorSystem.getName(classMirror.simpleName); // 'MyClass'

從庫鏡像獲取類鏡像

如果知道定義該類的庫的名稱,則可以在該庫上獲取一個鏡像,然后使用庫鏡像的classes屬性獲取ClassMirror。 classes屬性返回一個映射,其中的鍵是類名(表示為Symbols),而值是關聯的ClassMirror對象。

例如,這里是如何在'dart:core'庫中定義的StringBuffer類上獲取ClassMirror的方法:

var mirrorSystem = currentMirrorSystem();
var libraryMirror = mirrorSystem.findLibrary(const Symbol('dart.core')).first;
var classMirror = libraryMirror.declarations[const Symbol('StringBuffer')];
MirrorSystem.getName(classMirror.simpleName); // 'StringBuffer'
ClassMirror classMirror = reflectClass(Foo);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM