2017-07-14 98 views

回答

6

所有這三行都是「正確的」,並以完全相同的方式創建完全相同的實例。他們只是使用Kotlin提供的各種級別的類型推斷(即它可以從上下文中自行計算出類型和類型參數),從最詳細的第一個到最簡潔的最後一個。

由於這些行的內容完全沒有區別,所以您最好選擇使用哪一個最具可讀性。

1

看起來Kotlin是根據您爲Box構造函數提供的值推斷出的類型。它們都是有效的,因爲編譯器可以發現通用類型T將是一個類型Int。有可能如果你更明確一些編譯時優化,但我認爲這主要是一個偏好問題。

1

構造函數的值參數1的類型爲T,而Box<T>具有相同的類型參數T

編譯器知道1具有類型Int,所以 T = Int,使得Box(1) = Box<Int>(1)

Box<Int>(1)的類型是Box<Int>普通,所以box2box3的類型都是Box<Int>

2

他們是正確的,但並不總是相同的。讓他們一一瀏覽。

val box1: Box<Int> = Box<Int>(1) 
val box3 = Box(1) 

第一個聲明box1Box<Int>box3讓編譯器要弄清楚什麼是它的類型。它們並不總是相同的。 考慮Box<T>實現接口IBox<T>

val box1: IBox<Int> = Box<Int>(1) 
val box3 = Box(1) 

BOX1可以是實現IBOX而box3Box<Int>任何對象。

Box<Int>(1) 
Box(1) 

這與上面的類似。第一個明確聲明,第二個讓編譯器弄清楚。因爲1Int,所以相同。但是,這並非總是如此。

Box<Number>(1) 
Box(1) 

這使第一個Box<Number>代替Box<Int>

+1

好一點,通過給予一個明確的類型,你可以使用的東西比推斷類型人。但是OP的三個例子*是相同的,這就是問題所在。 – RobCo

相關問題