簡體   English   中英

Java泛型類型和方法

[英]Java generic types and methods

我想創建一個獲取List參數並創建某個jsonResult的函數。 我事先知道我的每個T對象都有一個getId()函數。 所以我的方法

private static <T> JsonObject createJsonAarrayResult(List<T> items, Class<T> type){
    JsonObject jsonResult = new JsonObject();
    JsonArray jsonResultItem = new JsonArray();
    for (T item : items){
        JsonObject jsonArrayItem = new JsonObject();
        jsonResultItem.addProperty("id", item.getId());

    }
    return jsonResult;
}

調用item.getId()的行當然會給我一個錯誤。 我怎么能繞過它呢。 我也使用type來傳遞類類型以用於轉換。 但我仍然得到一個錯誤。 有沒有辦法使用T但是從特定對象調用方法?

例如,你的每個T都將實現一個抽象類的接口,該接口具有此函數的getID()。

例如:

public interface InterfaceID {
    String getID();
}

然后確保傳遞給此方法的每個類型實際使用此接口(或您可能已經擁有的任何其他接口/類),您可以使用extends聲明泛型:

 private static <T extends InterfaceID> JsonObject createJsonAarrayResult(List<T> items){
    ....
    // The Class<T> parameter is not needed in your example and can be removed.

從現在開始,getID()函數可用。

你得到一個錯誤,因為java編譯器不知道T有一個像get Id這樣的方法。 您可以編寫如下界面:

public interface SomeInterface {  
    long getId();
}

然后像這樣修改你的界面。

private static <T> JsonObject createJsonAarrayResult(List<SomeInterface> items, Class<T> type){
   ...
}

不要忘記讓您的類實現SomeInterface。

此外,你可以使用

<T extends SomeInterface>

解決這個問題。

暫無
暫無

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

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