今天做《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语句内定义内部类和代码块(不知道{}是不是读代码块)中定义到底有什么区别

解决方案 »

  1.   

    答:还是与if语句内定义内部类无关。而是少一条return 语句。
    代码见下: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;//<==加上这个
      }
      

  2.   

    首先,这是个基本的编译错误,不是异常。很好理解,你的方法返回Instrument,但是你却不能保证这一点,换句话说,如果if中的条件不成立,你让方法返回什么呢?编译器无法知道。
      

  3.   

    cannot resolve symbol  
    symbol  : class Inner  
    这异常好像有点莫名不过楼主貌似没有理解必须保证方法有返回值这句话
      

  4.   

    要是if语句不能执行也就是flag=false,那就没有返回了,要在if语句块外面给出个返回,哪怕空的也行
    建议lz换个IDE,eclipse遇到这种情况会提示出错误
      

  5.   

    谢谢jiangnaisong多次的帮忙,也谢谢其他人的帮忙,我明白了,呵呵
    再次说一声:谢谢!!!