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();
怎么做?
答案 0 :(得分:2)
您需要像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
执行任何操作,并忘记login
。但是,您 要使用login
(或new Login()
的构造函数之一)初始化Login
,然后才能使用它。
答案 1 :(得分:2)
对我来说很有猜测,但我想知道你的问题是你有多个Login变量,一个非空且显示的,一个未显示的,是空的,而且你'重新尝试调用方法。您需要参考显示的那个。
回答这个问题:你是否已经展示了一个Login对象?
如果是这样,那么您需要引用那个 Login对象才能调用getPortalHandler()
方法。
答案 2 :(得分:2)
您的回答在您的问题中 - “我如何使用由其他班级创建的实例?”
要使用该实例,首先必须创建它。你有以下几行......
Login login;
这不会创建实例,它只是将变量声明为能够持有类型为Login
的对象。当你写这一行时,它只是指向null
的指针,直到你调用其中任何一个......
login = new Login();
Login login = new Login();
这将创建一个新的类实例,然后允许您访问其中的方法,例如login.getPortalHandler();
如果您在完成PortalHandler
对象后需要保留Login
,则需要在PortalHandler
之前获得对Login
的引用对象被清理。
例如......
PortalHandler portalHandler;
public void doLogin(){
Login login = new Login();
login.performLogin();
portalHandler = login.getPortalHandler();
}
在此示例中,Login实例仅存在doLogin()
方法的长度,之后它不再是有效对象。但是,您在完成之前已经引用了PortalHandler
对象,并将其存储为全局变量,因此您可以随时继续使用PortalHandler
。 / p>
答案 3 :(得分:0)
伙计们我认为问题可能是user521180已经在他的代码中的其他地方创建了login
的实例,该实例进一步创建了PortalHandler
的实例,他现在想要访问{{1}来自那个name
对象。
您的解决方案让他做的是创建另一个PortalHandler
对象,并通过这个新创建的对象访问login
,可能在{{1}中具有完全不同的值因为它是由不同的name
创建的不同name
字符串。
@ user521180:如果是这种情况,那么你需要在该代码中有一个方法(或全局变量),它创建一个name
对象,它以某种方式返回{{1}的实例}。因为检索对引用丢失或无法访问的堆中的对象的引用是不可能的(有些人可能不同意它的不可能部分)。