关于ArrayList的条件赋值的作用域问题



我试图处理一些不同的情况在我的代码依赖于从HTTPRequest对象拉出的属性。问题是,不同的数据被提取来填充数组列表取决于请求的东西,但格式是相同的。

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);
}

但是如果我初始化它,它会抱怨重复的局部变量。我如何设置这个初始化/分配不同的基于不同的情况?

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

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

试试这个:

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

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

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

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

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

那时候我还不太了解变量作用域和实例化。我有两个问题。

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值,这与第一个HM值冲突。

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

正确的方法是在更广泛的作用域中实例化变量,并在较小的作用域中引用它——而不需要重新初始化它。

相关内容

  • 没有找到相关文章

最新更新