簡體   English   中英

Java類的不同實例

[英]Java different instances of a class

為簡單起見,我使用導致問題的關鍵要素復制了我遇到的錯誤。

我有三個主要類,第一個是初始化和設置方法(主要)的主要類。 然后,我有了一個數據庫類,該類將從數據庫中提取數據到代碼中(Init)。 第三,我有一個用於處理GUI元素(訪問器)的GUI類。

我遇到了一個問題,當我從GUI調用accessor.print()方法時,在主類(init.setUp)的數據庫類(accessor.setUp)中初始化的變量(消息)顯示為null。 ActionListenerEvent之后的類。

我知道發生這種情況是因為同一類存在不同的實例,但是我不確定如何解決它。

這是主要的類:

public class main {
    public static void main(String[] args){
        Init init=new Init();
        init.setUp();

        Accessor acc=new Accessor();
        acc.tryAccess();
    }
}

這是init類:

public class Init {
    public String message;

    public void setUp(){
        message="Hello World";
    }
    public void print(){
         System.out.println(message.length());
    }
}

這是訪問器類:

public class Accessor {
    public void tryAccess(){
        Init init=new Init();
        init.print();
    }
}

提前致謝。

您有太多的初始化對象,並且一個與另一個無關。 很明顯,設置一個實例不會對另一個實例產生任何影響,而要解決此問題,您只需要一個實例。 更改

public class main {
    public static void main(String[] args){
        Init init=new Init();
        init.setUp();

        Accessor acc=new Accessor();
        acc.tryAccess();
    }
}

public class main {
    public static void main(String[] args){
        Init init=new Init();
        init.setUp();

        Accessor acc=new Accessor(init);  // pass it in!
        acc.tryAccess();
    }
}

然后將參數Init對象傳遞到Accessor對象的init字段中。

public class Accessor {
    private Init init;

    public Accessor(Init init) {
        this.init = init;  // initialize field
    }

    public void tryAccess(){
        // Init init=new Init();  // *** don't create a new instance!! ***
        init.print();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM