我试图处理一些不同的情况在我的代码依赖于从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);
}
正确的方法是在更广泛的作用域中实例化变量,并在较小的作用域中引用它——而不需要重新初始化它。