【问题标题】:Java. Method Inner Object as return type爪哇。方法内部对象作为返回类型
【发布时间】:2015-08-16 15:47:22
【问题描述】:

我可以从方法返回方法本地内部对象吗?

public class myClass {
    public MyMethodInnerClass getMethodInnerClassObject() {
        class MyMethodInnerClass {
        }

        MyMethodInnerClass myMethClass = new MyMethodInnerClass();

        return myMethClass;
    }
}

引发编译错误。 如果我无法返回我的方法本地内部类对象,那么在方法返回后如何保存它? 如何引用此对象以供将来使用?


抛出异常:

线程“main”java.lang.Error 中的异常:未解决的编译问题: MethodInnerClass 无法解析为类型

而且,我知道,方法中的局部变量存储在堆栈中,并在方法存在后立即删除。

【问题讨论】:

  • 什么是编译错误?请张贴
  • 你不能。不要这样设计。 MyMethodInnerClass 类是本地类。它的作用域只是方法的主体。
  • 我没有合适的 Java 编译器。甚至可以在方法中声明一个类吗?
  • @Dici 是,但也很少使用。
  • @PeterLawrey 好的,谢谢。对我来说真的没有意义。您不能在方法中定义方法,但方法中的类可以。哼……

标签: java class object theory scjp


【解决方案1】:

您的类的范围仅在方法内部。但是你可以这样做

public Object getMethodInnerClassObject() {

或

static class MyMethodInnerClass { }

public MyMethodInnerClass getMethodInnerClassObject() {
    return new MyMethodInnerClass();
}

【讨论】:

    【解决方案2】:

    我知道这是一个糟糕的设计。但只是为了好玩,您可以在使用反射的方法之外使用此对象。

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

    打印出来:

    在本地内部... :P

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多