Java本地内部类中的访问方法

萨文德拉·埃卡纳亚克

有什么方法可以访问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中,如果将某物声明为an Object,则只能访问为定义的方法Object编译器必须在编译时(而不是在运行时)知道您的对象ob有一个mInner方法,并且无法知道它唯一知道的是方法Object通过将其更改为AnInterface,编译器现在知道它具有mInner()方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章