通过 inner-class 实例从 outer-class 访问 outer-class 字段
Accessing outer-class fields through inner-class instance from outer-class
这是我正在努力解决的一个更大问题的一个简短子问题。
为什么我不能在第 8 行通过外部 class 中的内部 class 实例访问外部 classes 字段?
- 该字段从内部可见 class。
- 外部 class 中的非静态方法问题仍然存在。
- 字段的可见性无关紧要。无论哪种方式,它都可以从内部 class 看到。
- 可以通过内部 class 中的(私有)getter 访问该字段,但我的问题的原因之一是,我想避免这些。
- 它应该成为不可变构建器模式的变体,因此外部和内部 class 是紧密连贯地开发的。这是我敢于直接访问字段的唯一原因 w/o getters.
public class OuterClass {
private static OuterClass instanceOf(InnerClass innerClass) {
return new OuterClass(innerClass.outerField);
}
public static OuterClass instanceOf(int arg) {
return new OuterClass(arg);
}
private int outerField;
private OuterClass(int arg) {
this.outerField = arg;
}
// Outer class getters...
public InnerClass build() {
return new InnerClass(this);
}
public class InnerClass {
private InnerClass(OuterClass outerClass) {
outerField = outerClass.outerField;
}
// Inner class setters......
public OuterClass build() {
return OuterClass.instanceOf(this);
}
} // End InnerClass
} // End OuterClass
Why can't I access the outer classes field through an instance of
inner class in outer class in line 8?
因为该字段是 class OuterClass 的字段,而不是 class InnerClass 的字段。因此,要访问它,您需要 class OuterClass 的实例,而不是 class InnerClass 的实例。
当然,在 InnerClass 定义中,您可以隐式访问 OuterClass 的所有字段。但这只是从上下文内部访问的问题。您没有指定要访问该字段的对象是什么,因此语言会自动 select 为您指定。它通常是 this.field,但是对于包含 class 的字段,它实际上是 OuterClass.this.field.
一旦您试图指出您要访问的字段的对象是什么,而不是让语言隐式 select 那个对象给您,那么这个对象实际上必须是包含字段的 class。
这是我正在努力解决的一个更大问题的一个简短子问题。
为什么我不能在第 8 行通过外部 class 中的内部 class 实例访问外部 classes 字段?
- 该字段从内部可见 class。
- 外部 class 中的非静态方法问题仍然存在。
- 字段的可见性无关紧要。无论哪种方式,它都可以从内部 class 看到。
- 可以通过内部 class 中的(私有)getter 访问该字段,但我的问题的原因之一是,我想避免这些。
- 它应该成为不可变构建器模式的变体,因此外部和内部 class 是紧密连贯地开发的。这是我敢于直接访问字段的唯一原因 w/o getters.
public class OuterClass {
private static OuterClass instanceOf(InnerClass innerClass) {
return new OuterClass(innerClass.outerField);
}
public static OuterClass instanceOf(int arg) {
return new OuterClass(arg);
}
private int outerField;
private OuterClass(int arg) {
this.outerField = arg;
}
// Outer class getters...
public InnerClass build() {
return new InnerClass(this);
}
public class InnerClass {
private InnerClass(OuterClass outerClass) {
outerField = outerClass.outerField;
}
// Inner class setters......
public OuterClass build() {
return OuterClass.instanceOf(this);
}
} // End InnerClass
} // End OuterClass
Why can't I access the outer classes field through an instance of inner class in outer class in line 8?
因为该字段是 class OuterClass 的字段,而不是 class InnerClass 的字段。因此,要访问它,您需要 class OuterClass 的实例,而不是 class InnerClass 的实例。
当然,在 InnerClass 定义中,您可以隐式访问 OuterClass 的所有字段。但这只是从上下文内部访问的问题。您没有指定要访问该字段的对象是什么,因此语言会自动 select 为您指定。它通常是 this.field,但是对于包含 class 的字段,它实际上是 OuterClass.this.field.
一旦您试图指出您要访问的字段的对象是什么,而不是让语言隐式 select 那个对象给您,那么这个对象实际上必须是包含字段的 class。