Java – 如果字段具有相同名称,如何访问外部类字段
请考虑以下代码
class OuterClass{ class InnerClass{ int x; int y; void calculateX(){ x = y+z;//I want to access the y field of the outer class } void printX(){ print(); } } int y; int z; InnerClass instance; OuterClass(int y,int z){ this.y = y; this.z = z; instance = new InnerClass(); instance.y = 10; instance.calculateX(); instance.printX(); } void print(){ System.out.println("X:"+instance.x+"\nY:"+y+"\nZ:"+z+"\n"); } }
如果名称有重叠,如何访问外部类的字段?
我尝试过以下方法:
x=super.y; x=OuterClass.y;
并收到编译错误。
这种情况是否会出现在现实生活中?
最好的解决方案是为字段提供有意义且有区别的名称。 但这并非总是可行的……
要获取可以使用的字段或外部实例
OuterClass.this.y;
或者如果该字段是静态的
OuterClass.y;
注意: y
通常是this.y
缩写(取决于y
实际定义的位置)
同样,要调用您需要的外部类的实例方法。
OuterClass.this.method();
要么
OuterClass.method(); // static
注意:在Java 8中,您可以使用基于实例的方法引用。 例如
list.stream().filter(OuterClass.this::predicate);
它通常不应该(它是设计问题的标志),但尝试OuterClass.this.y
。
试试这个:
class OuterClass{ ... class InnerClass { ... int yFromOuterClass = OuterClass.this.y; } }
您可以在InnerClass
存储对自身的引用,并使用InnerClass
来访问其字段,如下所示:
class OuterClass{ OuterClass reference = this; ... class InnerClass { ... void calculateX() { reference.y; // OuterClass.y this.y; // InnerClass.y
您可以尝试使用y的getter方法
class OuterClass{ class InnerClass{ int x; int y; void calculateX(){ x = getY() + x; } void printX(){ print(); } } int y; int z; InnerClass instance; OuterClass(int y,int z){ this.y = y; this.z = z; instance = new InnerClass(); instance.y = 10; instance.calculateX(); instance.printX(); } void print(){ System.out.println("X:"+instance.x+"\nY:"+y+"\nZ:"+z+"\n"); } public int getY() { return y; } }