java怎么传递泛型参数
java如何传递泛型参数
写了这样一个泛型方法:
调试的时候发现调用方法时给定的泛型参数AccessStatistics根本没有传递进去,不出意料的从Json那里得到的是Object对象
也就是T没有传递进去,而是默认Object进行处理,因为Object是java的顶级类名,救命,求高手解答!
------解决方案--------------------
PostData(String serviceName, SearchInfo info)
方法签名改一下:
PostData(String serviceName, SearchInfo info, Class<T> clazz)
------解决方案--------------------
你敢把 全部代码 或者API都贴出来吗?
this.<AccessStatistics>PostData("test",info)
你这样就已经指明了 T是AccessStatistics类型的,编译的时候,编译器会把T换成AccessStatistics
从你给的代码,看不出问题
就连方法是要有个 List的返回的,你都没return,这要怎么看?
------解决方案--------------------
写了这样一个泛型方法:
- Java code
protected <T extends Model> List<T> PostData(String serviceName, SearchInfo info) throws ApiException { //其中builder是一个Json字符串 Type t = new TypeToken<List<T>>() { }.getType(); // Create a new Model from the JSON data. List<T> list = new Gson().fromJson( builder, t); }
- Java code
调用方法是这样调用的this.<AccessStatistics>PostData("test",info) //其中AccessStatistics是Model的一个子类,info是SearchInfo的实例化对象
调试的时候发现调用方法时给定的泛型参数AccessStatistics根本没有传递进去,不出意料的从Json那里得到的是Object对象
也就是T没有传递进去,而是默认Object进行处理,因为Object是java的顶级类名,救命,求高手解答!
------解决方案--------------------
PostData(String serviceName, SearchInfo info)
方法签名改一下:
PostData(String serviceName, SearchInfo info, Class<T> clazz)
------解决方案--------------------
你敢把 全部代码 或者API都贴出来吗?
this.<AccessStatistics>PostData("test",info)
你这样就已经指明了 T是AccessStatistics类型的,编译的时候,编译器会把T换成AccessStatistics
从你给的代码,看不出问题
就连方法是要有个 List的返回的,你都没return,这要怎么看?
------解决方案--------------------
- Java code
package test; import java.util.ArrayList; import java.util.List; public class Node extends IModel{ public static void main(String[] args) throws InstantiationException, IllegalAccessException { System.out.println(new Node().<Node>test(Node.class)); } public <T extends IModel> List<T> test(Class<T> clazz) throws InstantiationException, IllegalAccessException{ List<T> list= new ArrayList<T>(); T obj = clazz.newInstance(); list.add(obj); System.out.println(list.get(0).getClass()); return list; } } class IModel{ }
------解决方案--------------------
List<T> list = new Gson().<AccessStatistics>fromJson(builder.toString(), t);
------解决方案--------------------
错了,第2个参数就是类型了,
你可以换成这个试试
fromJson(JsonElement json, Class<T> classOfT)