有没有办法在 main 方法中创建方法局部内部 class 的对象?

Is there any way to create object of method-local inner class in main method?

我想知道是否有任何方法可以借助 Outerclass 对象在 main() 方法中创建方法局部内部 class 对象。

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();           
   }
}

编辑-1: 我正在探索在 main 方法中实例化方法局部内部 class 的方法(我知道方法局部内部 class 对 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();
       
   }
}

Class MethodInner_Demolocal class,不是 inner class,因为它是在方法体中声明的。参见例如The Java™ Tutorials.

局部 class 只能在声明它的方法中的代码中看到。

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

然后您可以创建一个实例,假设您已“授权”,如 publicprotectedprivate 访问修饰符所定义。您可以通过使用外部 class.

的实例来限定 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();
   }
}

方法本地 class 的类型对 main 是不可见的。但是,您可以创建该实例并将其传递给 main.

public class OuterClass {
    Object createInnerClass() {
        int num = 23;
        class InnerClass {
            @Override
            public String toString() {
                return "I'm InnerClass. num=" + num;
            }
        }
        return new InnerClass();
    }

    public static void main(String args[]) {
        OuterClass outer = new OuterClass();
        Object obj = outer.createInnerClass();
        System.out.println(obj);
    }
}

输出:

I'm InnerClass. num=23