有关ArrayList的条件赋值的范围问题

时间:2012-12-24 20:41:58

标签: java arraylist conditional variable-assignment

我正在尝试在我的代码中处理许多不同的情况,这取决于从HTTPRequest对象中提取的属性。问题是,不同的数据被拉动以填充依赖于Request的东西的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);
}

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

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

试试这个:

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

答案 2 :(得分:1)

您无法重新声明变量。见下文

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

答案 3 :(得分:1)

声明HM并在if / else之外将其初始化为null,并在if / else中使用,如下所示:

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

答案 4 :(得分: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);
}

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