class GenMethDemo {
static <T, V extends T> boolean isIn(T x, V[] y) {
for (int i = 0; i < y.length; i++)
if (x.equals(y[i]))
return true;
return false;
}
/*when compiled in java 7 it producing an error and compiling in java 8 without error */
public static void main(String args[]) {
Integer nums[] = {1, 2, 3, 4, 5};
String s[] = {"one", "two", "three"};
System.out.println(isIn("fs", nums));
/*
when compiled in java 7 it producing an error and compiling in java 8 without error */
}
}
Q
泛型類型不匹配
0
A
回答
1
這是由於Java 8中的通用目標類型推理改進。實際上,我回答了類似於上週的問題。 Java 8 call to generic method is ambiguous
問題的第一個答案Java 8: Reference to [method] is ambiguous也很好。
Java 8能夠推斷傳遞給泛型方法的參數類型。正如@Thomas在他的評論中所說的那樣,T
被推斷爲Object
,並且V
被推斷爲是Object
的對象,因此Integer
。在Java 7中,這隻會引發錯誤,因爲Integer
顯然不會延伸String
。
0
在Java 7類型推斷中將會看到T = String
和V = Integer
,這將不會滿足V extends T
。
然而,JLS對Java 8所指出,這會工作:
List<Number> ln = Arrays.asList(1, 2.0);
因此,在你的情況,這將被解析爲T = V = Object
。
相關問題
- 1. 泛型類型和類型不匹配
- 2. 類泛型的類型不匹配
- 3. Kotlin泛型繼承 - 類型不匹配
- 4. Java泛型 - 類型不匹配錯誤
- 5. Java流泛型類型不匹配
- 6. Scala類型與泛型不匹配
- 7. 泛型 - 向泛型提供具體類型時的類型不匹配
- 8. 匹配Scala宏中的泛型類型
- 9. 科特林:泛函類型不匹配
- 10. 綁定不匹配泛型
- 11. C#泛型:更好的方式來匹配泛型的類型?
- 12. 類型與Java泛型和匿名類不匹配
- 13. Java的泛型抽象類返回類型不匹配
- 14. 檢查指定類型是否匹配泛型類型?
- 15. 類型不匹配
- 16. 在鏽跡中使用特徵的泛型類型不匹配
- 17. 通用方法,泛型返回類型不匹配
- 18. 方法與泛型參數之間的不匹配類型
- 19. 方法簽名中的Java泛型類型不匹配
- 20. 隱泛型類型轉換不匹配重載方法簽名
- 21. 斯卡拉泛型和類型不匹配
- 22. 使用泛型返回類型提取表達式後類型不匹配
- 23. VBS類型不匹配錯誤800a000d類型不匹配:ReadFile的
- 24. 在參數匹配指定泛型類類型
- 25. 泛型方法,泛型類型不明
- 26. 標籤類型:類型不匹配
- 27. 類型參數的類型不匹配
- 28. Java泛型和「綁定不匹配」
- 29. 的Java泛型類型泛型類型
- 30. 泛型類型的泛型?
請編輯您的問題,以顯示*文本*描述問題。特別是,你在Java 7中遇到什麼錯誤? –
'isIn(「fs」,nums)''不應該工作,因爲在這種情況下'T'將是'String'並且'V'將是'Integer',它不會擴展'String'。然而,Java 8類型推斷可能會比較寬鬆,因爲它試圖找到一個匹配,即'T = Object'和'V = Object'。 – Thomas