简体   繁体   English

如何访问外部 class 实例?

[英]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 ,因为mcBuilder的 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.

相关问题 访问外层此实例 - Access Outer Class this instance Java如何在外部类的实例中访问另一个类的实例的属性? - Java how to access the property of instance of another class in the instance of outer class? 如何从内部类访问外部类实例的属性 - How to Access a Property of the Outer Class Instance from an Inner Class Java:如何使用“ this”访问外部类的实例变量? - Java: how to access outer class's instance variable by using “this”? 如何访问外部外部类(而非外部类)属性? - How to access outer outer class(not outer class) property? 使用存储在变量中的嵌套类实例访问外部类实例? - Access outer class instance using nested class instance stored in a variable? 将外部类实例设置为null,但内部类实例仍可以访问外部类的字段。 怎么样? - Setting outer class instance to null, and yet inner class instances is able to access outer class's field. How? 使用 javassist 匿名内部 class 时如何访问外部 class 的实例变量? - When using javassist anonymous inner class how to access instance variables of outer class? 如何在Java中使用内部类实例获取外部类实例 - How to get an outer class instance with an inner class instance in Java 在将外部类实例设置为null之后,为什么嵌套类对象仍然可以访问外部类属性? - Why nested class object is still having access to outer class attributes after setting the outer class instance to null?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM