首頁 > Java > java教程 > 為什麼在 Java 中使用原始類型和泛型方法會導致類型錯誤?

為什麼在 Java 中使用原始類型和泛型方法會導致類型錯誤?

Patricia Arquette
發布: 2024-11-12 00:10:03
原創
673 人瀏覽過

Why does using raw types with generic methods lead to type errors in Java?

結合原始類型和泛型方法

在 Java 中使用泛型時,了解使用原始類型的含義非常重要。原始類型只是對沒有指定任何類型參數的泛型類型的參考。

問題

考慮以下程式碼:

ArrayList<String> a = new ArrayList<>();
String[] s = a.toArray(new String[0]);
登入後複製

此程式碼編譯成功,因為toArray 是個接受 類型陣列的泛型方法。作為其論點。但是,如果將 ArrayList 引用宣告為原始類型:

ArrayList a = new ArrayList();
String[] s = a.toArray(new String[0]);
登入後複製

編譯器將產生錯誤,指示需要 String[],但找到了 Object[]。這是因為編譯器將泛型方法解釋為傳回 Object[],儘管接收 String[] 作為其參數。

理解原始類型

要理解這種行為,需要認識到當您使用原始類型時,您將失去指定類型參數的能力,這一點至關重要。 Java 語言規格(JLS) 規定,對於原始類型:

「原始類型C 的建構子、實例方法或非靜態欄位M 的類型,不是從其超類別或超介面繼承的是原始類型,對應 C對應的泛型聲明中其類型的擦除。泛型方法的意義

這表示當您使用原始類型作為泛型方法呼叫的目標時,編譯器無法推斷的方法。因此,該方法將被假定為僅在參數的類型參數上是通用的。在我們的例子中,由於我們傳遞了 String[] 參數,因此 toArray 方法被視為 。因此,傳回類型將為 T[],相當於 String[]。

進一步閱讀參考文獻

[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中文網其他相關文章!

    來源:php.cn
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    作者最新文章
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板