有没有办法在主方法中创建方法的对象本地内部类



我想知道是否有任何方法可以借助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();           
}
}

第1版:我正在探索在主方法中实例化方法本地内部类的方法(我知道方法本地内部类别对主方法不可见(,但仍然有什么解决方法吗?

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

}
}

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

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

如果您希望能够从另一个方法创建该类的实例,那么您需要将该类移动到该方法之外,使其成为实际的内部类。

然后,您可以创建一个实例,假设您是";"授权";,如publicprotectedprivate访问修饰符所定义的。您可以通过使用外部类的实例限定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();
}
}

方法本地类的类型对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

最新更新