簡體   English   中英

Java的使用? 在通用編程中

[英]Java use of ? in generic programming

考慮以下兩個實例函數:

public  <T> void f1 (List<? extends Object>  a) {
    System.out.println(a); 
}

public void f2 (<? extends Object>  a) {
    System.out.println(a); 
}

接受第一個函數,而第二個函數獲得錯誤標記Syntax error on token "(", Type expected after this token

我不明白原因。 有人能幫我嗎?

編輯:讓我改一下。 我有一堂課

package pk1;
public class Gencla<T> {
    public T alfa;
}

和測試班

package pk1;
public class Test {
    public void f1 ( Gencla<? extends Object>  a ) {
        System.out.println(a.alfa); 
    }
    public void f2 ( <? extends Object>  a ) {
        System.out.println(a); 
    }
    public static void main(String[] args) {
    }
}

在函數f1和f2中,要打印的是Type為“?extended Object”的東西。 為什么編譯器在f2上加一個標記?

您的f2函數:

public <T> void f2 ( <? extends Object>  a ) {
    System.out.println(a); 
}

失敗,請定義類型參數。 通配符從不用作泛型方法調用,泛型類實例創建或超類型的類型參數。 相反,它用於限制或擴展現有的集合或泛型類型,因此可以使用更少或更多的類型。

public <T extends Object> void f2 ( T a ) {
    //do stuff
}

這是您要做什么?

public <T extends Object> f2 (T a) {
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM