我檢討別人的Grails的代碼,我看到以下內容:隱式類型轉換?
Set<Integer> weeks = new ArrayList<Integer>()
它看起來像後,該行設定的是,Grails認爲周是HashSet
。我不熟悉Java或Grails,並且(java)文檔看起來像ArrayList extends List和HashSet extends Set,但是這種直接構造不起作用。這是一個Grails的事情嗎?謝謝。
我檢討別人的Grails的代碼,我看到以下內容:隱式類型轉換?
Set<Integer> weeks = new ArrayList<Integer>()
它看起來像後,該行設定的是,Grails認爲周是HashSet
。我不熟悉Java或Grails,並且(java)文檔看起來像ArrayList extends List和HashSet extends Set,但是這種直接構造不起作用。這是一個Grails的事情嗎?謝謝。
在Groovy看到new ArrayList<Integer>()
有些不尋常,因爲[]
的工作原理相同而且不太冗長,所以我會把它寫成Set<Integer> weeks = []
。然後它會更清楚地說明發生了什麼 - Groovy正在將一種集合類型轉換爲另一種集合類型,其中[]
確實是一種創建持有者並填充初始數據(如果有的話)的便捷方式。由於除[]
之外的List
和[:]
之外沒有任何語法糖,因此您需要進行這些轉換。
def weeks = [] as Set
可能是更常見的語法。這也是更清晰的,因爲[]
只是暫時的,並且使用「as」進行轉換,並且更明確地不僅僅是在左側聲明類型。
您也可以使用它將集合轉換爲數組。您不能使用Java語法來創建數組,因爲它使用大括號並且看起來像一個Closure定義,所以您不必使用int[] numbers = new int[] { 1, 2, 3 }
來做int[] numbers = [1, 2, 3]
或def numbers = [1, 2, 3] as int[]
。
我不知道聖盃,但是這段代碼編譯好嗎?有沒有TypeMismatch錯誤> – Zohaib