Я просмотрел библиотеку dart: mirrors и нашел ClassMirror . Пока я видел getField
, я не видел доступа ко всем полям. Но я видел getters
.
Если я хочу получить все поля для класса, нужно ли мне пройти getters
?
Я просмотрел библиотеку dart: mirrors и нашел ClassMirror . Пока я видел getField
, я не видел доступа ко всем полям. Но я видел getters
.
Если я хочу получить все поля для класса, нужно ли мне пройти getters
?
Ответ Здеслава Войковича немного устарел.
У меня это работает для Dart 1.1.3 по состоянию на 2 марта 2014 года.
import 'dart:mirrors';
class Test {
int a = 5;
static int s = 5;
final int _b = 6;
int get b => _b;
int get c => 0;
}
void main() {
Test t = new Test();
InstanceMirror instance_mirror = reflect(t);
var class_mirror = instance_mirror.type;
for (var v in class_mirror.declarations.values) {
var name = MirrorSystem.getName(v.simpleName);
if (v is VariableMirror) {
print("Variable: $name => S: ${v.isStatic}, P: ${v.isPrivate}, F: ${v.isFinal}, C: ${v.isConst}");
} else if (v is MethodMirror) {
print("Method: $name => S: ${v.isStatic}, P: ${v.isPrivate}, A: ${v.isAbstract}");
}
}
}
Выведет:
Variable: a => S: false, P: false, F: false, C: false
Variable: s => S: true, P: false, F: false, C: false
Variable: _b => S: false, P: true, F: true, C: false
Method: b => S: false, P: false, A: false
Method: c => S: false, P: false, A: false
Method: Test => S: false, P: false, A: false
Нет, вам следует пройти ClassMirror.variables
:
class Test {
int a = 5;
static int s = 5;
final int _b = 6;
int get b => _b;
int get c => 0;
}
void main() {
Test t = new Test();
InstanceMirror instance_mirror = reflect(t);
var class_mirror = instance_mirror.type;
for(var v in class_mirror.variables.values)
{
var name = MirrorSystem.getName(v.simpleName);
print("$name => S: ${v.isStatic}, P: ${v.isPrivate}, F: ${v.isFinal}");
}
}
Это выведет:
_b => S: false, P: true, F: true
a => S: false, P: false, F: false
s => S: true, P: false, F: false
ClassMirror.getters
вернет только b
и c
.
variables
действительно вводит в заблуждение, я бы хотел, чтобы оно называлось fields
.
- person Seth Ladd; 10.06.2013
variables
:) затем я заметил VariableMirror
подкласс DeclarationMirror
. Однако есть также LibraryMirror
, где переменные имеют больше смысла, ИМО - я думаю, это сделано для согласованности (или "согласованности", не могу решить :)
- person Zdeslav Vojkovic; 10.06.2013
declarations
: api.dartlang.org/apidocs/channels/stable/
- person Zdeslav Vojkovic; 02.03.2014