Java - 如何定义变量类型的变量

时间:2014-05-19 17:30:18

标签: java android class oop variables

我必须声明一个变量,这个变量的类型取决于一个参数,所以我有一个 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");

这让我:请求无法解析

因此,问题将是:我如何定义变量,它的类型取决于参数。

我尝试了什么

  • 将变量设置为 final

我当前的解决方案是复制代码,在每个 if 子句中,我设置相同 标题,连接,抓住响应,......所以,当然,我不喜欢这个。

设计即可。我有这样的HTTP请求类,所以我可以使用它来处理请求,因此,我只需要发送一些参数(URL,方法,身份验证,...),它将返回结果。这个类是我的Android应用程序的底层,如下所示:

  1. Activities.java (所有活动)
  2. Core.java (处理资源)
  3. HttpRequest.java (处理互联网资源)

3 个答案:

答案 0 :(得分:1)

HttpPostHttpGet都会继承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();
}