2013-08-02 34 views
1

在下面的例子中,主要允許呼籲狗嗅功能我寧願會以某種方式打破。如果我確切地說狗可以做什麼,但不知怎的,客戶知道更多,並可以讓對象做更多的特殊知識 - 我認爲這是一個封裝泄漏。我不一定希望它在一般情況下死亡,但是有沒有一種標誌或方法可以強制執行,只有方法在存在時纔會被調用。由於Dart Editor顯示警告,我知道該語言支持某些錯誤的知識:沒有爲「Dog」類定義方法「嗅探」。即使與運行 - 檢查標誌,這運行良好。我怎麼做分析警告觸發時故障

所以假設類似的代碼被測試調用。 Dart中是否有標誌或某些代碼在測試運行時導致其失敗?

abstract class Dog { 
    void run(); 
    void bark(); 
} 

class BigDog implements Dog { 
    void run() => print("Big dog running"); 
    void bark() => print("Woof"); 
    void sniff() => print("Sniff"); 
} 

main() { 
    Dog bd = new BigDog(); 
    bd.run(); 
    bd.bark(); 
    bd.sniff(); 
} 
+0

限制範圍到圖書館有什麼問題? 'void _sniff()' – MarioP

+0

嗅是壞榜樣,我應該使用只有大狗才會做的事情。但是,使用private _sniff並不能解決一般問題。這就像是說,「這裏有一個不錯的界面,去製作你想要的所有派生物,只要確保你添加的所有方法都是私人的」。我不想阻止世界嗅探,只是基於Dog實例。之所以出現這個問題,是因爲我有一些徹底的測試,但都使用了emacs。我將項目加載到Dart Editor中,發現問題。我不想改變語言,只需要自動分析0或接近0的分析警告。 – user1338952

回答

1

你應該確保在checked modedart -c testfile.dart運行測試,然後鍵入註釋考慮。您不應該在生產中使用checked mode,因爲它會減慢您的應用程序。

1

這是不可能的。問題是您的實例確實是 a BigDog;所以它真的有 a sniff方法。 Dart的一個重要目標是:type annotations do not affect runtime behaviour;因此您的Dog註釋無法改變行爲。

工具能夠突出顯示這一點,因爲它確實使用類型註釋。

這類問題在Dart bug追蹤器中出現很多;但是允許類型註釋改變行爲將是一個非常根本的改變,所以這不是我期望會被考慮的東西;儘可能混亂。 See here瞭解更多信息。