2

我试图根据从 HTTPRequest 对象中提取的属性来处理我的代码中的许多不同情况。问题是,不同的数据被拉取来填充依赖于请求内容的 ArrayList,但格式是相同的。

if (request.getAttribute("timePeriod").equals(null)) {
    ArrayList<ArrayList<MyWeirdObject>> HM = Test.getGlobalChallenge();
}
else {
    ArrayList<ArrayList<MyWeirdObject>> HM = Test.getGlobalChallengeByMonth(Test);
}

如果我没有在赋值之前对其进行初始化,那么代码(在 JSP 中)会说——当然——它不能解析 HM 对象。

ArrayList<ArrayList<MyWeirdObject>> HM = new ArrayList<ArrayList<MyWeirdObject>>();
if (request.getAttribute("timePeriod").equals(null)) {
    ArrayList<ArrayList<MyWeirdObject>> HM = Test.getGlobalChallenge();
}
else {
    ArrayList<ArrayList<MyWeirdObject>> HM = Test.getGlobalChallengeByMonth(Test);
}

但是如果我初始化它,它会抱怨重复的局部变量。如何将其设置为根据不同情况进行不同的初始化/分配?

4

5 回答 5

5

不要在 if 块内再次声明 ArrayList。

ArrayList<ArrayList<MyWeirdObject>> HM;
if ((request.getAttribute("timePeriod") == null) {
    HM = Test.getGlobalChallenge();
}
else {
    HM = Test.getGlobalChallengeByMonth(Test);
}
于 2012-12-24T20:43:44.187 回答
2

试试这个:

ArrayList<ArrayList<MyWeirdObject>> HM;
if ((request.getAttribute("timePeriod") == null) {
    HM = Test.getGlobalChallenge();
}
else {
    HM = Test.getGlobalChallengeByMonth(Test);
}
于 2012-12-24T20:44:05.630 回答
1

您不能重新声明该变量。见下文

ArrayList<ArrayList<MyWeirdObject>> HM = new ArrayList<ArrayList<MyWeirdObject>>();
if ((request.getAttribute("timePeriod") == null) {
    HM = Test.getGlobalChallenge();
}
else {
    HM = Test.getGlobalChallengeByMonth(Test);
}
于 2012-12-24T20:43:58.663 回答
1

在 if/else 外部声明HM并初始化它,然后null在 if/else 内部使用它,如下所示:

ArrayList<ArrayList<MyWeirdObject>> HM=null;
    if ((request.getAttribute("timePeriod") == null) {
       HM = Test.getGlobalChallenge();
    }
    else {
     HM = Test.getGlobalChallengeByMonth(Test);
    }
于 2012-12-24T20:44:18.913 回答
0

这是在我对变量范围和实例化了解很多之前。我有两个问题。

if (request.getAttribute("timePeriod").equals(null)) {
    ArrayList<ArrayList<MyWeirdObject>> HM = Test.getGlobalChallenge();
}
else {
    ArrayList<ArrayList<MyWeirdObject>> HM = Test.getGlobalChallengeByMonth(Test);
}

在这里,变量只存在于各自的案例中;当然,在此上下文之外引用它们失败了,因为它们不存在于更广泛的范围内。

ArrayList<ArrayList<MyWeirdObject>> HM = new ArrayList<ArrayList<MyWeirdObject>>();
if (request.getAttribute("timePeriod").equals(null)) {
    ArrayList<ArrayList<MyWeirdObject>> HM = Test.getGlobalChallenge();
}
else {
    ArrayList<ArrayList<MyWeirdObject>> HM = Test.getGlobalChallengeByMonth(Test);
}

而这个失败是因为我试图在 if/else 块中无意中实例化第二个 HM 值,这与第一个冲突。

ArrayList<ArrayList<MyWeirdObject>> HM = new ArrayList<ArrayList<MyWeirdObject>>();
if (request.getAttribute("timePeriod").equals(null)) {
    HM = Test.getGlobalChallenge();
}
else {
    HM = Test.getGlobalChallengeByMonth(Test);
}

正确的方法是在更广泛的范围内实例化变量,并在更小的范围内引用它——而不是重新初始化它。

于 2015-07-14T20:12:20.757 回答