미러 API가 작동하는 방식을 이해하려고합니다. 특히 을 사용하여 Symbol
에서 필드 값을 얻는 방법getField를 통해 미러링을 통해 클래스 변수 값 가져 오기
getField
메서드의 경우 getter 인 Symbol
에 해당하며 암시적일 수 있습니다. 따라서 나는 getField
이 필드에서 직접 호출 될 수 있다는 것을 이해했습니다. 다음 코드 샘플에서는 a
및 b
의 getter를 암시 적으로 정의해야합니다.
그러나 코드는 어떤 게터도 찾을 수 없다는 불평을 던지며 throw합니다. Breaking on exception: object of NoSuchMethodError
및 깨고 :이 작동하려면 명시 적으로 게터를 정의해야 할 잘못된 느낌 native "ClassMirror_invokeGetter";
abstract class CheckInitialized {
bool hasNull() {
var im = reflect(this);
var cm = im.type;
cm.declarations.values.where((dm) => dm is VariableMirror)
.forEach((vm) {
print(cm.getField(vm.simpleName));
});
// If field is null, return true
// If no fields are null, return false
}
}
class Test extends CheckInitialized {
int a;
String b;
}
void main() {
var a = new Test();
print(a.hasNull()); // true
}
에 '다트 거울 - patch_mirrors_impl.dart', 그러나 이것은 왜 나는 볼 수 없습니다 작동 안함. 물론, mirrors.dart는 여전히 많이 변하고 있기 때문에 v1.2.0에 대한 것임을 암시합니다.