Java。方法内部对象作为 return 类型
Java. Method Inner Object as return type
我可以 return 从方法中处理局部内部对象吗?
public class myClass {
public MyMethodInnerClass getMethodInnerClassObject() {
class MyMethodInnerClass {
}
MyMethodInnerClass myMethClass = new MyMethodInnerClass();
return myMethClass;
}
}
抛出编译错误。
如果我不能 return 我的方法本地内部 class 对象,那么我如何在方法 return 之后保存它?
我如何才能引用此对象以供将来使用?
抛出异常:
线程异常"main"java.lang.Error:未解决的编译问题:
MethodInnerClass 无法解析为类型
而且,我知道,方法中的局部变量存储在堆栈中,并在方法存在后立即删除。
您的 class 范围仅在方法内部。不过你可以这样做
public Object getMethodInnerClassObject() {
或
static class MyMethodInnerClass { }
public MyMethodInnerClass getMethodInnerClassObject() {
return new MyMethodInnerClass();
}
我知道这是一个糟糕的设计。但是为了好玩,你可以在使用反射的方法之外使用这个对象。
public class Test{
public static void main(String[] args) throws Exception {
Outer o = new Outer();
Outer.Inner in = o.new Inner();
//method local object
Object localObj = in.printInner();
//abusing reflection
localObj.getClass().getMethods()[0].invoke(localObj);
}
}
class Outer {
class Inner{
Object printInner() {
class LocalInner {
public void printLocal() {
System.out.println("Inside local inner... :P");
}
}
return new LocalInner();
}
}
}
这会打印:
Inside local inner... :P
我可以 return 从方法中处理局部内部对象吗?
public class myClass {
public MyMethodInnerClass getMethodInnerClassObject() {
class MyMethodInnerClass {
}
MyMethodInnerClass myMethClass = new MyMethodInnerClass();
return myMethClass;
}
}
抛出编译错误。 如果我不能 return 我的方法本地内部 class 对象,那么我如何在方法 return 之后保存它? 我如何才能引用此对象以供将来使用?
抛出异常:
线程异常"main"java.lang.Error:未解决的编译问题: MethodInnerClass 无法解析为类型
而且,我知道,方法中的局部变量存储在堆栈中,并在方法存在后立即删除。
您的 class 范围仅在方法内部。不过你可以这样做
public Object getMethodInnerClassObject() {
或
static class MyMethodInnerClass { }
public MyMethodInnerClass getMethodInnerClassObject() {
return new MyMethodInnerClass();
}
我知道这是一个糟糕的设计。但是为了好玩,你可以在使用反射的方法之外使用这个对象。
public class Test{
public static void main(String[] args) throws Exception {
Outer o = new Outer();
Outer.Inner in = o.new Inner();
//method local object
Object localObj = in.printInner();
//abusing reflection
localObj.getClass().getMethods()[0].invoke(localObj);
}
}
class Outer {
class Inner{
Object printInner() {
class LocalInner {
public void printLocal() {
System.out.println("Inside local inner... :P");
}
}
return new LocalInner();
}
}
}
这会打印:
Inside local inner... :P