我正在编写将与HttpGet和HttpPost一起使用的函数。 它是这样的:
private void initialize(HttpRequestBase method)
{
if(method == new HttpPost())
{
String body = "body";
HttpEntity entity = new ByteArrayEntity(body.getBytes("UTF-8"));
method.setEntity(entity);
}
问题是HttpRequestBase不支持.setEntity。如何编写支持HttpGet和HttpPost的函数没有这样的问题?
答案 0 :(得分:2)
解决此问题的方法是使用instanceof
检查类型并使用强制转换。像这样:
private void initialize(HttpRequestBase method)
{
if(method instanceof HttpPost)
{
String body = "body";
HttpEntity entity = new ByteArrayEntity(body.getBytes("UTF-8"));
((HttpPost) method).setEntity(entity);
}
}
但是无论何时使用演员表,都应该考虑可能有一个更优雅的解决方案。在这种情况下,我认为更优雅的解决方案是使用方法重载并为HttpPost
实例提供特定的方法。
private void initialize(HttpPost method)
{
String body = "body";
HttpEntity entity = new ByteArrayEntity(body.getBytes("UTF-8"));
method.setEntity(entity);
}
当然这意味着您需要一个单独的方法HttpGet
(以及您希望支持的HttpRequestBase
的任何其他子类)。 GET
和POST
之间共享的任何公共代码都应提取到由initialize()
方法调用的较小方法中。
private void initialize(HttpGet method)
{
// ...
}
当然,你可能会争辩说试图为GET
和POST
创建一个处理程序的全部意义。你会是对的。但是你应该质疑尝试创建一个处理两者的方法的整个练习。也许最优雅的设计是分开处理它们。毕竟,这正是您使用的框架的作者选择做的。