Java 为什么我不能实例化这个变量?
我在JSP文件中有以下代码:Java 为什么我不能实例化这个变量?,java,Java,我在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((page
// 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将实例化它。我怎么了?如果你发表评论,干杯
MainHomePage pageApp = new MainHomePage(session);
pageApp.someMethod()将没有任何名为pageApp的变量可用代码>
所以编译器说
如果else是本地块,则在中创建的pageApp
如果您有意见
MainHomePage pageApp = new MainHomePage(session);
pageApp.someMethod()将没有任何名为pageApp的变量可用代码>
所以编译器说
如果else是本地块,则在中创建的pageApp
因此,您应该按照以下方式修改代码:
主页pageApp
字符串pageValue=request.getParameter(“页面”);
if((pageValue!=null)&&(pageValue.compareTo(“1”)==0)){
pageApp=新主页(会话);
}else if((pageValue!=null)和&(pageValue.compareTo(“2”)=0)){
pageApp=新的主附件设备(会话);
}否则{
pageApp=新主页(会话);
}
pageApp.someMethod()
现在,您使用的页面应用程序与开始时定义的页面应用程序相同。在您的代码版本中,您创建了仅位于if和else之间的块中的局部变量。因此,您应该按照以下方式修改代码:
主页pageApp
字符串pageValue=request.getParameter(“页面”);
if((pageValue!=null)&&(pageValue.compareTo(“1”)==0)){
pageApp=新主页(会话);
}else if((pageValue!=null)和&(pageValue.compareTo(“2”)=0)){
pageApp=新的主附件设备(会话);
}否则{
pageApp=新主页(会话);
}
pageApp.someMethod()
现在,您使用的页面应用程序与开始时定义的页面应用程序相同。在您的代码版本中,您创建了仅位于if和else之间的局部变量。实际上,您不应该编译的内容,因为pageApp
不在最后一行的范围内。看起来您混淆了变量声明和变量赋值。Java允许您在同一语句中同时执行这两项操作,但是,您只能在同一范围内声明一个变量
如果取消对第一个声明的注释,但仍将其他声明保留在If
和else
语句中,则会出现与重复声明相关的编译时错误。在if
和else
语句块中,您使用不同的类型声明相同的变量。如果可能,您应该为该变量找到一个抽象类型,该类型由您正在实例化的两种类型(例如MainHomePage
和MainAffittaAppartamenti
)共享,然后在if
和else
块外和主方法范围内声明
例如,如果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();
请注意,在内部块中,我没有再次声明变量(即使用其类型定义它)。鉴于我的假设陈述,mainaffettappartamanti
是mainhepage
的一个子类,那么将其分配给pageApp
仍然有效。实际上,您不应该编译的内容,因为pageApp
不在最后一行的范围内。看起来您混淆了变量声明和变量赋值。Java允许您在同一语句中同时执行这两项操作,但是,您只能在同一范围内声明一个变量
如果取消对第一个声明的注释,但仍将其他声明保留在If
和else
语句中,则会出现与重复声明相关的编译时错误。在if
和else
语句块中,您使用不同的类型声明相同的变量。如果可能,您应该为该变量找到一个抽象类型,该类型由您正在实例化的两种类型(例如MainHomePage
和MainAffittaAppartamenti
)共享,然后在if
和else
块外和主方法范围内声明
例如,如果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();
请注意,在内部块中,我没有再次声明变量(即使用其类型定义它)。鉴于我的假设陈述,mainaffettappartamanti
是mainhepage
的一个子类,那么将其分配给pageApp
仍然有效。我如何将其共享?(不限于本地区)嗯,是的。但MainAffittaAppartamenti不是MainHomePage的子类。我想我无法解决这个问题:(我如何才能把它共享?(不仅仅是本地的)嗯,是的。但是MainAffittaAppartamenti不是MainHomePage的子类。我想我无法解决这个问题:(呃,问题是MainAffittaAppartamenti不是MainHomePage的子类:)因此,如果它们不是类/子类,则有一个解决方案?@markzzz-除非您可以访问源代码,否则这不是一个简单的解决方案。如果它们不共享相同的接口或抽象基类,则无法对共享变量调用someMethod
。如果您可以访问源代码,则可以使用someMethod()创建接口
或其他,并设置两个类来实现该接口,然后用该接口声明pageApp
。@markzzz-而且,这些可能已经有一个共享基类了-这就是我所说的“您应该为两种类型共享的变量找到一个抽象类型”。如果存在,并且该类型已具有someMethod()
,则您将使用该类型进行声明。ehh,问题在于MainAffittaAppartamenti不是MainHomePage:)的子类,因此存在一个解决方案