![](/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.