我已经看过很多关于这个论点的帖子,但这是我第一次使用泛型/反射。我想创建一些方法来包装JAX-WS调用(doPost,doGet等)
为此,JAX-WS有一个这样的方法:
Integer resp = client.target(url).request().post(Entity.entity(user, MediaType.APPLICATION_JSON), Integer.class);
所以它想要作为最后一个参数,"返回类型"。
要做到这一点,我已经创建了一个包装帖子的课程:
public class GenericPost<I> {
public static I doPost(String name, Object entity) {
String url = Constants.SERVICE_HOST_NAME + method + "/";
Client client = ClientBuilder.newClient();
I resp = client.target(url).request().post(Entity.entity(entity, MediaType.APPLICATION_JSON), /* How i can tell that here i want i.class ?*/);
return resp;
}
}
正如我在代码中所描述的,我如何告诉方法最后一个参数是I(通用)类?
我会像这样使用这种方法:
GenericPost<Integer> postInteger = GenericPost<Integer>.doPost("something", arg);
GenericPost<String> postInteger = GenericPost<String>.doPost("something", arg);
答案 0 :(得分:2)
在非泛型类中创建泛型方法,并将Class<T>
作为参数传递:
public class GenericPost {
public static <T> T doPost(String name, Object entity, Class<T> clazz) {
String url = Constants.SERVICE_HOST_NAME + method + "/";
Client client = ClientBuilder.newClient();
T resp = client.target(url).request().post(Entity.entity(entity, MediaType.APPLICATION_JSON), clazz);
return resp;
}
}
并像这样使用它:
Integer postInteger = GenericPost.doPost("something", arg, Integer.class);
String postString = GenericPost.doPost("something", arg, String.class);