2015-03-19 22 views
2

文檔的@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編輯器/分析器的錯誤嗎?

回答

0

你可以做的是

@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

+0

不是我想要做的(我希望它能夠代理任何對象,包括一些在編譯時不知道),但我想我'必須爲此而解決。謝謝。 – DomJack 2015-03-20 01:37:06