2013-08-31 22 views
0

我想構建一個通用類,其中包含T類型的對象。包含類必須對這些對象執行一些運算符,特別是像+,-,*/這樣的運算符。我怎樣才能確保對象的類型實現這些操作符?如何確保泛型中的類型實現了Dart中的某些運算符?

具體來說,我正在實現一個矩陣類,就像在數學矩陣中一樣。我本來可以只允許double元素,但我希望能夠製作自定義數字類的矩陣,如有理數或複數(這是較大項目的一部分)。

我現在實現了簽名

class Matrix<T extends MatrixElement> { 
    final int _rows;   // The number of rows 
    final int _cols;   // The number of columns 
    ... 
    final List<T> _elements; // Matrix data, [i*step+j] is row i, col j. 

哪裏MatrixElement是與運營商的一個抽象類,像

dynamic operator + (dynamic other); 

我可能已經改變了Matrix類簡單class Matrix<T> { ... },但隨後可以在出現錯誤運行時和Dart編輯器中充滿了關於操作員未被定義爲類Object的警告。

我的直覺所說的是類似於class Matrix<T implements MatrixElement> { ... },但Dart似乎並不支持這一點。

回答

2

我認爲你可以做的最好的就是假設元素具有這些方法並且使類型參數不受限制。這將擺脫警告,雖然它可能有點不滿意,當你想要的類型系統來幫助你。

聯盟類型將有所幫助,所以這裏是您可以明星的錯誤:http://dartbug.com/4938

+0

謝謝!我在問題中調整了我的表述,因爲我的意思是說,如果我沒有指定任何類型的T來擴展(無界限)(這是我在初始階段嘗試的,在添加'extends MatrixElement'部分之前) 。 – Mikke

+0

接受你的答案,因爲它可能是最好的。去年在Go上寫作之後,我想念Go如何使用接口來處理類型。 – Mikke

相關問題