java - Java 局部内部类中的访问方法

标签 java inner-classes

有没有办法访问Java中局部内部类的方法。以下代码是我之前尝试过的示例代码。据此,访问 mInner() 方法的机制是什么?

class Outer{
    int a=100;

    Object mOuter(){
        class Inner{
            void mInner(){
                int y=200;
                System.out.println("mInner..");
                System.out.println("y : "+y);
            }
        }
        Inner iob=new Inner();  
        return iob;
    }
}   
class Demo{
    public static void main(String args[]){
        Outer t=new Outer();
        Object ob=t.mOuter();
        ob.mInner(); // ?need a solution..
    }
}

最佳答案

正如 ILikeTau 的评论所说,您无法访问您在方法中定义的类。您可以在方法之外定义它,但另一种可能性是定义一个 interface(或抽象类)。然后代码仍会在您的方法中,并且可以访问方法中定义的 final 变量和参数(如果将整个类移到外面则无法做到)。像这样的东西:

class Outer {
    int a = 100;

    public interface AnInterface {
        void mInner();  // automatically "public"
    } 

    AnInterface mOuter() {   // note that the return type is no longer Object
        class Inner implements AnInterface {
            @Override
            public void mInner() {    // must be public
                int y = 200;
                System.out.println("mInner..");
                System.out.println("y : " + y);
            }
        }
        Inner iob = new Inner();  
        return iob;
    }
}   

class Demo {
    public static void main(String[] args) {  // the preferred syntax
        Outer t = new Outer();
        Outer.AnInterface ob = t.mOuter();
        ob.mInner(); 
    }
}

注意:未测试

请注意,返回类型和 ob 的类型已从 Object 更改。这是因为在 Java 中,如果您将某物声明为 Object,则您只能访问为 Object 定义的方法。编译器必须在编译时(而不是在运行时)知道你的对象 ob 有一个 mInner 方法,它不能告诉它是否唯一的东西知道它是一个 Object。通过将其更改为 AnInterface,编译器现在知道它有一个 mInner() 方法。

关于java - Java 局部内部类中的访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32409324/

相关文章:

c++ - 声明/初始化私有(private)嵌套结构的静态成员

c++ - 抽象类中的嵌套类

java - Libgdx 不断绘制纹理

java - Grails/groovy 测试 - assert 和 assertEquals 方法之间的任何区别

java - 使用CardLayout的小程序是空白的

java - 这个包含内部类的变量到底做什么?

Java接口(interface)内部类

java - 获取以某种方式使用 RabbitMQ 中给定队列的 channel

java - 通过套接字从java发送固定长度数组到python

java - 定义为匿名内部类的 java 事件监听器如何使用封闭类中的变量?