我在JSP文件上有这段代码:
// MainHomePage pageApp = new MainHomePage(session);
String pageValue=request.getParameter("page");
if((pageValue!=null) && (pageValue.compareTo("1")==0)) {
MainHomePage pageApp = new MainHomePage(session);
} else if((pageValue!=null) && (pageValue.compareTo("2")==0)) {
MainAffittaAppartamenti pageApp = new MainAffittaAppartamenti(session);
} else {
MainHomePage pageApp = new MainHomePage(session);
}
pageApp.someMethod();
如果我不删除它所说的第一行的评论(关于pageApp)“找不到符号”......为什么这个? if-else会在任何情况下实例化它。我错了什么?干杯
答案 0 :(得分:3)
如果您发表评论
MainHomePage pageApp = new MainHomePage(session);
pageApp.someMethod();
所以编译说,
你在if中创建的pageApp
是否为本地阻止
答案 1 :(得分:1)
所以,你应该修改你的代码如下:
MainHomePage pageApp;
String pageValue = request.getParameter(“page”); if((pageValue!= null)&&(pageValue.compareTo(“1”)== 0)){ pageApp = new MainHomePage(session); } else if((pageValue!= null)&&(pageValue.compareTo(“2”)== 0)){ pageApp = new MainAffittaAppartamenti(session); } else { pageApp = new MainHomePage(session); } pageApp.someMethod();
现在使用您在开头定义的相同pageApp。在您的代码版本中,您创建了局部变量,该变量位于if和else之间的块中。
答案 2 :(得分:1)
实际上,你所拥有的东西不应该编译,因为pageApp
不在最后一行的范围内。您似乎对变量声明和变量赋值感到困惑。 Java允许您在同一语句中执行这两个操作,但是,您只能在同一范围内声明一次变量。
如果您取消注释第一个声明但仍然将其他声明留在if
和else
语句中,那么您将收到与重复声明相关的编译时错误。在if
和else
语句块中,您将使用不同类型声明此相同变量。如果可能,您应该找到由您实例化的两种类型共享的变量的抽象类型(例如MainHomePage
和MainAffittaAppartamenti
),然后在if
和{else
之外声明它{1}}块和主方法范围。
例如,如果MainAffittaAppartamenti
是MainHomePage
的子类,那么您可以这样做:
MainHomePage pageApp; // Declare here but do not assign
String pageValue=request.getParameter("page");
if((pageValue!=null) && (pageValue.compareTo("1")==0)) {
pageApp = new MainHomePage(session);
} else if((pageValue!=null) && (pageValue.compareTo("2")==0)) {
pageApp = new MainAffittaAppartamenti(session);
} else {
pageApp = new MainHomePage(session);
}
pageApp.someMethod();
请注意,在内部块中,我没有再次声明变量(即使用它的类型定义它)。因为,根据我的假设陈述,MainAffittaAppartamenti
是MainHomePage
的子类,然后将其分配给pageApp
仍然有效。