簡體   English   中英

如何使用由其他類創建的類的實例?

[英]How can I use an instance of a class that was created by a different class?

Login.java

PortalHandler portalHandler = new PortalHandler(dataString);
...
public PortalHandler getPortalHandler(){
        return portalHandler;
    }

PortalHandler.java

public String getName()
{
return name;
}

ThirdClass.java我想獲取由login.java創建的實例中的名稱,但隨后給出了空指針錯誤

Login login;
PortalHandler portalHandler = login.getPortalHandler();

如何做呢?

您需要像這樣初始化loginLogin login = new Login()

當然,這是假定Login具有一個不帶參數的構造函數。


根據OP的評論進行編輯

我想您正在尋找做這樣的事情:

Login login = new Login();
login.doLoginStuff();
PortalHandler portalHandler = login.getPortalHandler();
// Do nothing with login from here on out

然后,您可以使用portalHandler進行任何操作,而portalHandler login 但是您必須先使用new Login() (或Login的構造函數之一new Login()初始化login ,然后才能使用它。

在我這方面有很大的猜測,但是我想知道您的問題是否是您有多個Login變量,一個不為null並顯示,另一個未顯示為null,並且您試圖調用方法。 您需要參考所顯示的內容。

回答這個問題:您已經在顯示一個Login對象了嗎?

如果是這樣,則需要引用 Login對象才能調用getPortalHandler()方法。

您的答案在您的問題之內-“如何使用由其他類創建的類的實例 ?”

為了使用實例,首先必須創建它。 您有以下一行...

Login login;

這不會創建實例,而只是聲明一個能夠容納Login類型的對象的變量。 當您編寫此行時,它只是一個指向null的指針,直到您調用其中任何一個...

login = new Login();
Login login = new Login();

這將創建該類的新實例,然后使您可以訪問其中的方法,例如login.getPortalHandler();

如果需要在完成Login對象后保留PortalHandler以便使用,則需要在清理Login對象之前獲得對PortalHandler的引用。

例如...

PortalHandler portalHandler;

public void doLogin(){
    Login login = new Login();
    login.performLogin();
    portalHandler = login.getPortalHandler();
}

在此示例中,Login實例僅在doLogin()方法的長度內存在,此后不再是有效的對象。 但是,您在完成操作之前已經引用了PortalHandler對象,ans PortalHandler對象存儲為全局變量,因此您可以隨時使用PortalHandler

伙計們,我認為問題可能在於user521180已經在其代碼的其他位置創建了一個login實例,從而進一步創建了PortalHandler實例,他現在想從該PortalHandler對象訪問name

您的解決方案使他要做的是創建另一個login對象,並通過這個新創建的對象訪問name ,該name 可能具有完全不同的name因為它將是由另一個PortalHandler創建的不同name String。

@ user521180:如果是這種情況,那么您還需要在該代碼中有一個方法(或全局變量),該方法創建一個login對象,該對象以某種方式返回PortalHandler的實例。 因為無法檢索對引用丟失或不可訪問的堆中對象的引用(有些人可能無法同意其不可能的部分)。

暫無
暫無

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

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