首页 > 解决方案 > Java中的本地内部类

问题描述

对于下面的代码示例,当我们执行代码时,它将打印:


来自本地内部类的实例方法

现在,如果我只想执行本地内部类方法 m2() 并希望输出为:

来自本地内部阶层

class A {
    void m1() {
        class B {
            void m2() {
                System.out.println("from local inner class");
            }
        }
        System.out.println("from instance method");
        B b = new B();
        b.m2();
    }

    public static void main(String[] args) {
        A a = new A();
        a.m1();
    }
}

当绝对需要本地内部类时,究竟是什么用例,否则某些功能可能无法实现。

标签: javainner-classes

解决方案


我看不到您在做什么,也许您想将方法的创建与方法的调用分开,将所有实现细节隐藏在内部类中?如果是这样怎么办......

首先创建一个接口,这样你就知道你正在访问什么类型(比反射更整洁)

interface X {
    void m2()
}

现在方法 m1() 返回一个类实现接口的实例

class A {
    X m1() {
        class B {
            void m2() {
                System.out.println("from local inner class");
            }
        }
        B b = new B();
        return b;
    }

    public static void main(String[] args) {
        A a = new A();
        // call m1() to get an instance of interface X
        X x = a.m1();
        // invoke method on interface instance
        x.m2()
    }
}

这将方法的创建(包装在一个类中,认为是“函子”)与方法的调用分开。


推荐阅读