爲什麼這段代碼沒有引發錯誤?飛鏢混淆參數化列表
List<String> x;
void main() {
x = [1,23,3,423,2];
print(x);
}
很抱歉的新手問題,但我剛開始學習鏢,我問這個,因爲我的理解是,x
只能包含的String
清單,並應拋出一個異常,由於值不是列表的String
,但列表num
。這是一個錯誤,或?
爲什麼這段代碼沒有引發錯誤?飛鏢混淆參數化列表
List<String> x;
void main() {
x = [1,23,3,423,2];
print(x);
}
很抱歉的新手問題,但我剛開始學習鏢,我問這個,因爲我的理解是,x
只能包含的String
清單,並應拋出一個異常,由於值不是列表的String
,但列表num
。這是一個錯誤,或?
這是可選的鍵入操作。
var x; // same as List<String> x
List<String> y;
main() {
x = [1,2,3,4];
y = x; // valid
x = y; // valid
print(x); // [1,2,3,4]
print(y); // [1,2,3,4]
}
無論您指定List<String>
或var
,你的代碼將執行相同。工具使用類型註釋(List<String>
)來驗證您的代碼。
在達特朗網站上閱讀的好文章是關於optional types的文章。
編輯:其實,這也是一個關於列表的有趣點。如果您使用文字列表初始化列表(例如,[]
),那麼你實際上是在創建一個List()
,如:
main() {
var x = new List();
var y = [];
print(x is List); // true
print(y is List); // true
}
但是,如果你想使用泛型類型化的列表,你必須使用構造函數的語法如:
main() {
var x = new List<String>();
print(x is List); // true
print(x is List<String>); // true
print(x is List<num>); // false
}
飛鏢類型是可選的不是靜態的。所以在運行時,所有類型的annonations基本上被替換爲var
只是一個另外:你也可以這樣寫:'無功富= [ '富', '酒吧'];'。 :) –
謝謝 - 我忘記了這個變種! –