dart: использование прокси-аннотаций
Документация для @proxy
аннотация состояния:
Если класс помечен с
@proxy
или он реализует любой аннотированный класс, то считается, что класс реализует любой интерфейс и любой член в отношении статического анализа типов. Таким образом, это не предупреждение о статическом типе для назначения объекта переменной любого типа, и это не предупреждение о статическом типе для доступа к любому члену объекта.
Однако, учитывая следующий код:
import 'dart:mirrors';
@proxy
class ObjectProxy{
final InstanceMirror _mirror;
ObjectProxy(Object o): _mirror = reflect(o);
@override
noSuchMethod(Invocation invocation){
print('entered ${invocation.memberName}');
var r = _mirror.delegate(invocation);
print('returning from ${invocation.memberName} with $r');
return r;
}
}
class ClassA{
int k;
ClassA(this.k);
}
void printK(ClassA a) => print(a.k);
main() {
ClassA a = new ObjectProxy(new ClassA(1)); //annoying
printK(a);
}
редактор дротиков предупреждает
A value of type 'ObjectProxy' cannot be assigned to a variable of type 'ClassA'.
Код выполняется должным образом в непроверенном режиме, но предупреждение раздражает, и, насколько я могу судить, подавление этого предупреждения - единственное, что @proxy
тег должен делать.
Я неправильно понимаю использование @proxy
тег, или это ошибка в редакторе / анализаторе дротиков?
1 ответ
Что вы можете сделать, это
@proxy
class ObjectProxy implements ClassA {
final InstanceMirror _mirror;
ObjectProxy(Object o): _mirror = reflect(o);
@override
noSuchMethod(Invocation invocation){
print('entered ${invocation.memberName}');
var r = _mirror.delegate(invocation);
print('returning from ${invocation.memberName} with $r');
return r;
}
}
вам нужно заявить, что ObjectProxy
реализует интерфейс, но вам не нужно его реализовывать. Если вы думаете, что это ошибка, сообщите об этом на http://dartbug.com/