public static class Outer {
public int field;
public class Inner {}
}
// caller methods
public static void foo(Outer.Inner inner) {
// here I want to access the "field"
// tried the following, none worked
System.out.println(inner.Outer.field);
System.out.println(inner.Outer.this.field);
}
如何从Java中非静态内部类的引用访问类的非静态字段?
P.S
人们一直说这是糟糕的设计。是的,我同意100%这是糟糕的“设计”。至少,对于需要人类阅读的代码来说,这是不好的。但如果这是生成的代码,我想我会得到一个通行证。 (有没有人试过读取Antlr出来的代码,例如?)
答案 0 :(得分:0)
似乎是一个不太好的主意,但无论如何,你需要自己明确地导出它。
public static class Outer {
public int field;
public class Inner {
public Outer outer() {
return Outer.this;
}
}
}
// caller methods
public static void foo(Outer.Inner inner) {
System.out.println(inner.outer().field);
}
答案 1 :(得分:0)
这可能有效 - 无论如何都是错误的编码练习
public static class Outer {
public int field;
public class Inner {
public Outer outer=Outer.this
}
}
// caller methods
public static void foo(Outer.Inner inner) {
System.out.println(inner.Outer.field);
System.out.println(inner.Outer.this.field);
}
答案 2 :(得分:0)
其他答案中提到了一个选项。如果由于某种原因它不适合您的情况,您可以使用getter(以及需要的setter)从Inner公开field
:
public Outer class {
private int field;
public class Inner {
public int getOuterField() {
return field;
}
}
}
不同的方法是在需要使用Outer
的任何地方传递相应的Inner
实例,因此在这种情况下foo
将采用两个参数。
是的,我同意发布的所有评论 - 所有选项都表明设计不好。