Java問號意思

Java 中的問號 "?" 通常用於類型推斷和變量聲明。它與 Java 7 引入的 "占位符" 類型一起使用,以簡化泛型編程和 varargs 方法調用。

以下是有關 "?" 在 Java 中的幾種用法:

  1. 泛型類和方法的類型變量: 當你定義一個泛型類或方法時,可以使用 "?" 作為占位符來表示一個未指定的類型。這允許你在使用泛型時避免指定具體的類型,除非在需要時才指定。

    例如:

    List<?> list = new ArrayList<>();

    在上面的代碼中,List<?> 表示一個未知類型的 List,這意味著你可以將 list 用於讀取操作,但不能用於寫入操作,因為你不確定 list 可以接受什麼樣的元素。

  2. 通配符類型: 你可以使用 "?" 來定義通配符類型,這允許你在使用泛型時有更多的靈活性。

    例如:

    List<? extends Number> list = new ArrayList<Integer>();

    在上面的代碼中,List<? extends Number> 表示一個 List,它可以包含任何數字類型的元素,包括 Number 及其子類。

  3. varargs 方法調用: 當你調用一個 varargs 方法時,可以使用 "?" 來表示一個未知數量的參數。

    例如:

    void func(List<String>... lists) {
        // ...
    }
    
    func(List<? extends String> list1, List<? extends String> list2);

    在上面的代碼中,func 方法接受一個或多個 List<String> 作為參數。在調用 func 方法時,你可以傳入一個或多個 List,只要它們的元素是 StringString 的子類。

  4. 未知類型的變量聲明: 在某些情況下,你可能想要聲明一個變量,但是不知道它的具體類型。在這種情況下,你可以使用 "?" 來表示一個未知類型的變量。

    例如:

    Object obj = new Object();
    ? obj2 = obj;

    在上面的代碼中,obj2 的類型是 Object,因為 obj 的類型是 Object。但是,如果你將 obj 賦值給一個未知類型的變量,obj2 的類型可以是任何類型。

總之,"?" 在 Java 中用於表示一個未知或未指定的類型,這可以幫助你在編寫代碼時保持靈活性。