首页 > 解决方案 > 从外部调用方法本地内部类的方法

问题描述

public class OuterMain {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.m2();
    }
}

class Outer {
    public void m1() {
        class Inner {
            void display() {
                System.out.println("msg is displayed");
            }
        }
        Inner inn = new Inner();
        //cannot write code to call display() here
    }
    
    public void m2() {
    //inner.display();
    }
}

上面是代码块,其中有一个方法本地内部类。内部类中的 display 方法打印一条消息。主类创建一个 Outer 实例并调用 m2()。我被要求进行修改,在 java 中应用任何概念,但任务是从 m2() 调用内部类的 display() 方法。唯一的限制是该方法不能设为静态。

标签: javajava-8

解决方案


您可以做的一件事是使用私有接口并Inner实现它,从而能够m2()返回一个对象,该对象的display()方法可以在同一个外部类的其他地方调用

class Outer {
    public Displayable m1() {
        class Inner implements Displayable {
            @Override
            public void display() {
                System.out.println("msg is displayed");
            }
        }
        return new Inner();
    }

    private interface Displayable {
        void display();
    }

    public void m2() {
        m1().display();
    }
}

推荐阅读