[英]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.