我正在尝试在我的代码中处理许多不同的情况,这取决于从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);
}
但如果我初始化它,它会抱怨重复的局部变量。如何根据不同的情况将其设置为初始化/分配?
答案 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);
}
正确的方法是在更广泛的范围内实例化变量,并在较小的范围内引用它 - 而无需重新初始化它。