這是我之前的問題的後續,但由於前一個線程很長,我決定啓動另一個線程,涉及幾乎相同的主題。Java泛型:關於類型捕獲和使用泛型方法生成推理的問題
public class GenericMethodInference {
static <T> void test1(T t1, T t2) {}
static <T> void test3(T t1, List <T> t2) {}
static <T> void test4(List <T> t1, List <T> t2) {}
public static void main(String [] args) {
List <Object> c = new LinkedList<Object>();
List <? extends Object> d = new ArrayList<Integer>();
List e = new ArrayList<Integer>();
test1("Hello", new Integer(1)); // ok clause (1)
GenericMethodInference.<Object>test1("Hello", new Integer(1)); // ok clause (2)
test3("Hello", c); // ok clause (3)
test4(d,d) // clause (4) Error due to different type capture generated
}
注意:如果您將光標移到每一個條款,你會看到正在生成的推理和基於Eclipse顯示:
一個。條款(1)將產生<?擴展對象> test1 <?擴展Object,?擴展對象>
b。條款(2)將產生確切的實際類型參數
c中定義的內容。第(3)會產生<對象> TEST3 <對象,列出<對象>>
問題:
- 爲什麼第(1)沒有產生<對象>?由於< Object>的工作原理如條款(2)所示,爲什麼<?擴展Object>而不是生產?
- 爲什麼從句(3)產生< Object>而不是<?擴展對象>?
- 由於條款(4)使用相同的變量,爲什麼2個不同類型的捕獲生成事件,儘管使用的參數是相同的變量d?
「如果將光標移動到每個子句上」 - 哪個IDE請好? (更新:感謝編輯) –
Eclipse,他說;) –
什麼是第4條? –