Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我不能实例化这个变量?_Java - Fatal编程技术网

Java 为什么我不能实例化这个变量?

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

我在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将实例化它。我怎么了?如果你发表评论,干杯

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:)的子类,因此存在一个解决方案