簡體   English   中英

Java將數組傳遞給泛型方法

[英]Java passing Array to generic method

我有這種通用方法:

public <T> T get(Class<T> type, String... keys)
{
    String key = String.join(".", keys);
    if(this._data.containsKey(key))
        return type.cast(this._data.get(key));

    return null;
}

而且我需要將通用數組作為類型傳遞,但我不知道該怎么做:

public <T extends SearchableItem> ArrayList<T> filterAudio(T[] type, int taxonomyId, TaxonomyLevel level, int count) {
    T[] all = (T[])masterDbManager.get(type, "audiotracks-alphabetic");
    ....
}

但這不起作用,因為get()方法需要一個類:

錯誤:(200,39)java:com.xxxxxx.yyyyy.dal.MasterDbManager類中的方法無法應用於給定類型; 必需:java.lang.Class,java.lang.String []找到:T [],java.lang.String原因:無法推斷類型變量T(參數不匹配; T []無法轉換為Java。 lang.Class)

不是數組,那么當我需要檢索數組時如何使用get()方法?

希望我的要求清楚:)

編輯 :好的,我需要.getClass()方法

T[] all = (T[])masterDbManager.get(type.getClass(), dbKey);

但是如何現在從以下方法調用filterAudio()方法?

public <T> ArrayList<T> searchAudio(Class<T> type, int taxonomyId, TaxonomyLevel taxonomyLevel, String searchText, int page, int pageSize, SearchOrder order) {
    ArrayList<T> all = filterAudio(???, taxonomyId, taxonomyLevel, 0);
    ...
}

在您的特定情況下,您可以簡單地編寫(T[])masterDbManager.get(Object.class, "audiotracks-alphabetic")因為無論如何都將結果(T[])masterDbManager.get(Object.class, "audiotracks-alphabetic")T[]

通常,沒有對應於T[]類型的Class 無論具有哪種基本類型的數組,它始終將始終為Array.class

您必須傳遞確切的類型來獲取方法。 如果您的類型是數組,則需要根據提供的簽名傳遞類似String []。class的內容

暫無
暫無

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

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