[英]How to access Outer class Instance?
I've static nested class like below我有 static 嵌套 class 如下
public class AbstractClass {
String AbstractClass = "AbstractClass";
AbstractClass(){
System.out.println("default constructor");
}
AbstractClass(String inp){
this.AbstractClass = inp;
System.out.println(this.AbstractClass);
}
}
-----
public class MyClass {
String MyClassVrbl = "MyClass";
public static class Builder extends AbstractClass {
String staticclassVrbl = "staticclassVrbl";
Builder() {
}
Builder(String inp) {
super(inp);
System.out.println("custom construtor");
}
}
public static void main(String[] args) {
MyClass.Builder mc = new MyClass.Builder("calling custom");
System.out.println(mc.how can access outer class instance variable..?);
}
}
Once nested class(Builder) instance is created, parent( MyClass
) must be instantiated too..right?一旦创建了嵌套类(生成器)实例,父类(
MyClass
)也必须实例化..对吗? How can I access outer class instance out of mc
to access MyClassVrbl
?如何从
mc
访问外部 class 实例以访问MyClassVrbl
?
Is isnt it strange if MyClass
is not instantiated even after creating nested Builder
class?如果
MyClass
即使在创建嵌套的Builder
class 之后也没有实例化,这不是很奇怪吗?
Once nested class(Builder) instance is created, parent(MyClass) must be instantiated too..right?
一旦创建了嵌套类(Builder)实例,父类(MyClass)也必须实例化......对吗?
That's not the case because the nested class is static.情况并非如此,因为嵌套的 class 是 static。 If it were an inner non-static class, then there would be an instance of the outer class associated with it.
如果它是一个内部的非静态 class,那么就会有一个与之关联的外部 class 的实例。 So the answer is you can't get the outer instance because it does not exist.
所以答案是你不能得到外部实例,因为它不存在。
Static nested class: Static 嵌套 class:
public class MyClass {
public static class Builder {
Builder() {
MyClass outerInstance = MyClass.this; // does not compile
}
}
}
Non-static nested class (aka inner class):非静态嵌套 class (又名内部类):
public class MyClass {
public class Builder {
Builder() {
MyClass outerInstance = MyClass.this; // ok
}
}
}
Besides, when using the builder pattern you probably want to access the created instance using a build()
method.此外,在使用构建器模式时,您可能希望使用
build()
方法访问创建的实例。
You can't access myClassVrbl
using mc
, because mc
is an object of Builder
which is a subclass of AbstractClass
.您不能使用
mc
访问myClassVrbl
,因为mc
是Builder
的 object ,它是AbstractClass
的子类。 You can access members of AbstractClass
, but not of MyClass
.您可以访问
AbstractClass
的成员,但不能访问MyClass
的成员。 Instantiating a Builder
class object calls its super class constructor, not the one within which it is nested.实例化一个
Builder
class object 调用它的超级 class 构造函数,而不是它嵌套的构造函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.