有没有办法在 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_Demo
是 local class,不是 inner class,因为它是在方法体中声明的。参见例如The Java™ Tutorials.
局部 class 只能在声明它的方法中的代码中看到。
如果您希望能够从另一个方法创建 class 的实例,那么您需要将 class 移到该方法之外,这样它就变成了一个实际的 内 class.
然后您可以创建一个实例,假设您已“授权”,如 public
、protected
和 private
访问修饰符所定义。您可以通过使用外部 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
我想知道是否有任何方法可以借助 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_Demo
是 local class,不是 inner class,因为它是在方法体中声明的。参见例如The Java™ Tutorials.
局部 class 只能在声明它的方法中的代码中看到。
如果您希望能够从另一个方法创建 class 的实例,那么您需要将 class 移到该方法之外,这样它就变成了一个实际的 内 class.
然后您可以创建一个实例,假设您已“授权”,如 public
、protected
和 private
访问修饰符所定义。您可以通过使用外部 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