今天做《Think in JAVA》题时遇到了一些令我一解的事,想了很久,还是有点不明白。现在把代码贴出来希望哪位大虾能指点一、两。
这段代码是内部类定义在if语句块中,是不是定义在if语句块中之后,他就不能够用Return语句来返回内部类了吗? package test14;interface Instrument{
void fun();
}public class Test14{
boolean flag;
Test14(boolean b){
flag=b;
}
public Instrument getInterface(){
if(flag){
class Inner implements Instrument{
public void fun(){
System.out.println("This is Inner fun");
}
}
//Instrument i=new Inner();
//i.fun();
return new Inner(); //======这样子去返回会出现异常========
}
}
public static void main(String[] args){
boolean flag=true;
new Test14(flag).getInterface();
}
}
异常显示:
Test14.java:16: cannot resolve symbol
symbol : class Inner
location: class test14.Test14
return new Inner();这段代码是内部类定义在语句块{}中,但他能够用Return语句来返回内部类 package test14_1;interface Instrument{
void fun();
}public class Test14_1{
public Instrument getInterface(){
{
class Inner implements Instrument{
public void fun(){
System.out.println("This is Inner fun");
}
}
return new Inner();//====这里用Return语句就能返回了。
}
}
public static void main(String[] args){
Instrument i=new Test14_1().getInterface();
i.fun();
}
}想了很久还是不明白if语句内定义内部类和代码块(不知道{}是不是读代码块)中定义到底有什么区别
这段代码是内部类定义在if语句块中,是不是定义在if语句块中之后,他就不能够用Return语句来返回内部类了吗? package test14;interface Instrument{
void fun();
}public class Test14{
boolean flag;
Test14(boolean b){
flag=b;
}
public Instrument getInterface(){
if(flag){
class Inner implements Instrument{
public void fun(){
System.out.println("This is Inner fun");
}
}
//Instrument i=new Inner();
//i.fun();
return new Inner(); //======这样子去返回会出现异常========
}
}
public static void main(String[] args){
boolean flag=true;
new Test14(flag).getInterface();
}
}
异常显示:
Test14.java:16: cannot resolve symbol
symbol : class Inner
location: class test14.Test14
return new Inner();这段代码是内部类定义在语句块{}中,但他能够用Return语句来返回内部类 package test14_1;interface Instrument{
void fun();
}public class Test14_1{
public Instrument getInterface(){
{
class Inner implements Instrument{
public void fun(){
System.out.println("This is Inner fun");
}
}
return new Inner();//====这里用Return语句就能返回了。
}
}
public static void main(String[] args){
Instrument i=new Test14_1().getInterface();
i.fun();
}
}想了很久还是不明白if语句内定义内部类和代码块(不知道{}是不是读代码块)中定义到底有什么区别
代码见下:public Instrument getInterface(){
if(flag){
class Inner implements Instrument{
public void fun(){
System.out.println("This is Inner fun");
}
}
//Instrument i=new Inner();
//i.fun();
return new Inner(); //======这样子去返回会出现异常========
}
return null;//<==加上这个
}
symbol : class Inner
这异常好像有点莫名不过楼主貌似没有理解必须保证方法有返回值这句话
建议lz换个IDE,eclipse遇到这种情况会提示出错误
再次说一声:谢谢!!!