我必须声明一个变量,这个变量的类型取决于一个参数,所以我有一个 if 子句并在那里定义这个变量:
if(this.httpMethod == "POST"){
HttpPost request = new HttpPost(url);
}
if(this.httpMethod == "GET"){
HttpGet request = new HttpGet(url);
}
问题是在Java中,该变量的范围位于 if 之内,所以我以后不能使用它!如果我尝试:
request.addHeader("Accept", "application/json");
这让我:请求无法解析
因此,问题将是:我如何定义变量,它的类型取决于参数。
我尝试了什么:
我当前的解决方案是复制代码,在每个 if 子句中,我设置相同 标题,连接,抓住响应,......所以,当然,我不喜欢这个。
设计即可。我有这样的HTTP请求类,所以我可以使用它来处理请求,因此,我只需要发送一些参数(URL,方法,身份验证,...),它将返回结果。这个类是我的Android应用程序的底层,如下所示:
答案 0 :(得分:1)
HttpPost
和HttpGet
都会继承HttpRequestBase
。所以你可以在if
语句之外声明请求变量,如下所示:
HttpRequestBase request = null;
if (this.httpMethod.equals("POST")) {
request = new HttpPost(url);
}
else if (this.httpMethod.equals("GET")) {
request = new HttpGet(url);
}
request.addHeader(...); etc
答案 1 :(得分:0)
您需要将变量声明为if
块之外的超类型,然后在其中使用它:
HttpRequestBase request = null;
if("POST".equals(this.httpMethod)){
request = new HttpPost(url);
}
else if("GET".equals(this.httpMethod)){
request = new HttpGet(url);
}
然后在您的代码中,当您准备好使用它时,请务必检查请求是否为null
。
根据原始问题的更改进行编辑
答案 2 :(得分:0)
您应该在if语句之外声明两个变量类型的超类的变量。例如:
Superclass object;
if (condition){
object = new Subclass1();
}
else {
object = new Subclass2();
}