3

@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か、それとも dart エディター/アナライザーのバグですか?

4

1 に答える 1