繁体   English   中英

如何使用另一个内部类方法中的内部类实例?

[英]How can I use an inner class instance from another inner class method?

public class Ex7 {
    private int fld;

    private void meth(int val) {
        fld = val;
        System.out.println(" meth() -> fld = " + fld);
    }

    public class Ex7Inner1 {
        void operateOnFld() {
            fld = 12;
        }

        void operateOnMeth() {
            meth(10);
        }

        public void bar() {
            System.out.println(" bar() ");
        }
    }

    class Ex7Inner2 {
        Ex7Inner1 i1 = new Ex7Inner1();
        // how to call i1.bar() ??
        i1.bar();
    }
}

您的问题是您需要在函数内调用i1.bar() 例如

class Ex7Inner2 {
    Ex7Inner1 i1 = new Ex7Inner1();  // this is now a field of the Ex7Inner2 class
    public void callBar() {
        i1.bar();                    // this will work
    }
}

将来,您可能会发现,如果您将问题中遇到的错误包括在内,那么人们将可以提供更多帮助,我现在将做。 当您尝试以自己的方式编译代码时,您会看到类似以下的错误

Ex7.java:26: <identifier> expected
  i1.bar();
        ^
1 error

这是因为您可以在方法外部执行的唯一操作(就像您最初拥有的一样)是声明变量。 因此,它期待一个“标识符”,它的意思是“您要声明的变量的名称”。 所以如果你说过

String s;

s将是标识符。

这里有些错误;

  • 您的inner2需要在函数内部调用i1
  • 由于您没有将inner1声明为静态,因此需要包含Ex7的实例。

因此,您可以执行以下操作:

public class Ex7 {

    private Ex7Inner1 i1;
    public class Ex7Inner1 {
        public void bar() {
            System.out.println( " bar() " );
        }
    }

    class Ex7Inner2 {
        // how to call i1.bar() ??
        public Ex7Inner2() {
            Ex7.this.i1.bar();
        }
    }
}

要访问Ex7的i1。

您的Ex7实例包含一个inner1和一个inner2,而您从inner2内部引用的内容是inner2-> parentEx7->子inner1。

如果您将内部类设为静态,则可以取消使用Ex7引用,因为您定义的是内部类不需要外部类的实例存在。

但是Ex7Inner2类中没有方法。 使用“ i1.bar();”创建方法 调用里面,它可以编译

Ex7Inner1需要实例化对Ex7的引用。 Ex7Inner2引用是Ex7.this

因此说

Ex7Inner1 i1 = Ex7.this.new Ex7Inner1()

有关更多信息,请参见Java教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM