[英]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
将是标识符。
这里有些错误;
因此,您可以执行以下操作:
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.