在 Java 中使用泛型時,了解使用原始類型的含義非常重要。原始類型只是對沒有指定任何類型參數的泛型類型的參考。
問題
考慮以下程式碼:
ArrayList<String> a = new ArrayList<>(); String[] s = a.toArray(new String[0]);
此程式碼編譯成功,因為toArray 是個接受
ArrayList a = new ArrayList(); String[] s = a.toArray(new String[0]);
編譯器將產生錯誤,指示需要 String[],但找到了 Object[]。這是因為編譯器將泛型方法解釋為傳回 Object[],儘管接收 String[] 作為其參數。
理解原始類型
要理解這種行為,需要認識到當您使用原始類型時,您將失去指定類型參數的能力,這一點至關重要。 Java 語言規格(JLS) 規定,對於原始類型:
「原始類型C 的建構子、實例方法或非靜態欄位M 的類型,不是從其超類別或超介面繼承的是原始類型,對應 C對應的泛型聲明中其類型的擦除。泛型方法的意義這表示當您使用原始類型作為泛型方法呼叫的目標時,編譯器無法推斷的方法。因此,該方法將被假定為僅在參數的類型參數上是通用的。在我們的例子中,由於我們傳遞了 String[] 參數,因此 toArray 方法被視為
進一步閱讀參考文獻
[JLS 4.8: 原始類型](https://docs.oracle.com/javase/specs/jls/se17 /html/jls-4.html#jls-4.8)[Java教學:泛型](https:// docs.oracle.com/javase/tutorial/java/generics/)
以上是為什麼在 Java 中使用原始類型和泛型方法會導致類型錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!