我想知道是否有任何方法可以借助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™教程。
局部类只能由声明它的方法中的代码看到。
如果您希望能够从另一个方法创建该类的实例,那么您需要将该类移动到该方法之外,使其成为实际的内部类。
然后,您可以创建一个实例,假设您是";"授权";,如public
、protected
和private
访问修饰符所定义的。您可以通过使用外部类的实例限定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