首页 > 解决方案 > 有没有办法在主方法中创建方法局部内部类的对象?

问题描述

我想知道是否有任何方法可以在 Outerclass 对象的帮助下在 main() 方法中创建方法本地内部类对象。

public class Outerclass {
   // instance method of the outer class 
   void my_Method() {
      int num = 23;

      // method-local inner class
      class MethodInner_Demo {
         public void print() {
            System.out.println("This is method inner class "+num);     
         }   
      } // end of inner class
       
      // Accessing the inner class
      MethodInner_Demo inner = new MethodInner_Demo();
      inner.print();
   }
   
   public static void main(String args[]) {
      Outerclass outer = new Outerclass();
      outer.my_Method();           
   }
}

Edit-1:我正在探索在 main 方法中实例化方法本地内部类的方法(我知道方法本地内部类对 main 方法不可见)但是,有什么解决方法吗?

public class Outerclass {
   // instance method of the outer class 
   void my_Method() {
      int num = 23;

      // method-local inner class
      class MethodInner_Demo {
         public void print() {
            System.out.println("This is method inner class "+num);     
         }   
      } // end of inner class   
   }
   
   public static void main(String args[]) {
      Outerclass outer = new Outerclass();
      //inner-class object is created while calling my_Method()
      // TBH IDK how to do this 
      outer.my_Method().new MethodInner_Demo();
       
   }
}

标签: javastaticinner-classes

解决方案


MethodInner_Demo本地类,而不是内部类,因为它是在方法体中声明的。参见例如Java™ 教程

本地类只能通过声明它的方法中的代码看到。

如果您希望能够从另一个方法创建类的实例,那么您需要将类移到方法之外,这样它就变成了一个实际的内部类。

然后,您可以创建一个实例,假设您已“授权”,由public,protectedprivate访问修饰符定义。您可以通过new使用外部类的实例限定运算符来做到这一点。

在您的情况下,我们还需要添加一个字段来携带 的值num

public class Outerclass {
   // instance method of the outer class 
   void my_Method() {
      int num = 23;
       
      // Accessing the inner class
      Inner_Demo inner = new Inner_Demo(num);
      inner.print();
   }

   // inner class
   class Inner_Demo {
      private final int num;
      Inner_Demo(int num) {
         this.num = num;
      }
      public void print() {
         System.out.println("This is inner class "+num);
      }   
   } // end of inner class
   
   public static void main(String args[]) {
      Outerclass outer = new Outerclass();
      outer.my_Method();
      
      // Accessing the inner class
      int num = 42;
      Inner_Demo inner = outer.new Inner_Demo(num);
      inner.print();
   }
}

推荐阅读