我想创建一个获取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但是从特定对象调用方法?
答案 0 :(得分:11)
例如,你的每个T都会实现一个抽象类的接口,该接口具有此函数的getID()。
E.g:
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()函数可用。
答案 1 :(得分:1)
您收到错误,因为java编译器不知道T有像get Id这样的方法。您可以编写如下界面:
public interface SomeInterface {
long getId();
}
然后像这样修改您的界面。
private static <T> JsonObject createJsonAarrayResult(List<SomeInterface> items, Class<T> type){
...
}
不要忘记让你的类实现SomeInterface。
另外,你可以使用
<T extends SomeInterface>
解决这个问题。