我需要在實用程序類中添加一些方法,使用一些靜態方法來解析JSON字符串中的內容並返回一組事物。靜態方法的泛型
問題是,有這些東西各種亞型,所以我創造了這個方法:
public static <E extends Thing> E[] parseThingsFromJSON(String body) {
return parser.fromJson(body, E[].class);
}
如何來電告訴這種方法是什麼E
是什麼?還是有更好的方法來做到這一點?
我需要在實用程序類中添加一些方法,使用一些靜態方法來解析JSON字符串中的內容並返回一組事物。靜態方法的泛型
問題是,有這些東西各種亞型,所以我創造了這個方法:
public static <E extends Thing> E[] parseThingsFromJSON(String body) {
return parser.fromJson(body, E[].class);
}
如何來電告訴這種方法是什麼E
是什麼?還是有更好的方法來做到這一點?
你需要通過它。
public static <E extends Thing> E[] parseThingsFromJSON(String body, Class<E[]> eClass) {
return parser.fromJson(body, eClass);
}
泛型在很大程度上是編譯時功能。這意味着它在運行時不可用(有一些例外)
在這種情況下,爲了使泛型在運行時可用,必須將它作爲附加參數傳遞。
從內存中,這是一個類似的問題,你使用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){...}
這是類似於你我認爲
請你指點我對這個解決方案的一些解釋?我不知道發生了什麼,我想;)這個額外的'Class'參數的目的是什麼? – wasyl
@wasyl希望我的解釋有所幫助。讓我知道你還想知道什麼。 –