2012-08-31 59 views
1

我需要在實用程序類中添加一些方法,使用一些靜態方法來解析JSON字符串中的內容並返回一組事物。靜態方法的泛型

問題是,有這些東西各種亞型,所以我創造了這個方法:

public static <E extends Thing> E[] parseThingsFromJSON(String body) { 
    return parser.fromJson(body, E[].class); 
} 

如何來電告訴這種方法是什麼E是什麼?還是有更好的方法來做到這一點?

回答

5

你需要通過它。

public static <E extends Thing> E[] parseThingsFromJSON(String body, Class<E[]> eClass) { 
    return parser.fromJson(body, eClass); 
} 

泛型在很大程度上是編譯時功能。這意味着它在運行時不可用(有一些例外)

在這種情況下,爲了使泛型在運行時可用,必須將它作爲附加參數傳遞。

+0

請你指點我對這個解決方案的一些解釋?我不知道發生了什麼,我想;)這個額外的'Class'參數的目的是什麼? – wasyl

+0

@wasyl希望我的解釋有所幫助。讓我知道你還想知道什麼。 –

1

從內存中,這是一個類似的問題,你使用Arrays.asList()

有了這個,當你

Arrays.<MyOjbect>(new MyObject(), new MyObject()); 

或在特定情況下你傳遞一個數組 例如有什麼

Arrays.<Integer[]>asList(new Integer[]{new Integer(1)}); 

此方法在JDK的簽名是

public static <T> List<T> asList(T... a){...} 

這是類似於你我認爲