![](/img/trans.png)
[英]Java : Can I use the thread created on an instance of one class in another class?
[英]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();
如何做呢?
您需要像這樣初始化login
: Login 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.