我有一段代码,我想概括,但我不知道如何实现。我的程序处理许多具有相同getter/setter但不共享接口的jaxbelement类,这些类需要在将它们发送到web服务之前设置属性。在不久的将来,相同类型的类的数量可能会增加。这可以用泛型来概括,还是需要动态代理?
public class ServiceClient1 {
public Response getResponse(ReqObject1 req1) {
req1.getValue().setConfig("john","doe");
return client.target(endpoint).request(MediaType.TEXT_XML).post(Entity.entity(req1, MediaType.TEXT_XML);
}
public RespObject1 readResponse(Response resp1) {
return resp1.readEntity(RespObject1.class);
}
}
变成这样
public class ServiceClient {
public <T> Response getResponse(T req) {
req.getValue().setConfig("john","doe");
return client.target(endpoint).request(MediaType.TEXT_XML).post(Entity.entity(req, MediaType.TEXT_XML);
}
public <T> T readResponse(Response resp) {
return resp.readEntity(T.class);// ???
}
}
2条答案
按热度按时间mqkwyuun1#
谢谢普拉桑纳。反射解决方案可能是实现共享接口的 Package 类的一个很好的替代方案。
yiytaume2#
处理getresponse()
方案1:
如果您的请求类可以实现一个公共接口,那么可以完全使用泛型来处理这个方法。
接口和类定义:
getresponse()实现:
注意:根据您的示例,输入参数的类型似乎总是
JAXBElement
.方案2:
如果您无法实现所有请求类
Configurable
我们需要用反射来推广这种方法。注意:为了简洁起见,我让方法重新抛出异常。我们可以使用自定义异常并适当地处理它。
处理readresponse()
这个方法完全可以使用泛型来处理。只需为返回类型再传递一个参数。