0

登录.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();

如何做呢?

4

4 回答 4

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然后才能使用它。

于 2012-05-21T02:49:22.637 回答
2

我的猜测很大,但我想知道您的问题是否是您有多个登录变量,一个不为空并显示,一个未显示为空,并且您正在尝试调用一个方法。您需要对显示的那个的引用。

回答这个问题:您是否已经显示了登录对象?

如果是这样,那么您需要对该登录对象的引用才能调用该getPortalHandler()方法。

于 2012-05-21T02:53:48.360 回答
2

您的答案在您的问题之内 - “我如何使用由不同类创建的类的实例?”

为了使用实例,您首先必须创建它。您有以下行...

Login login;

这不会创建实例,它只是将变量声明为能够保存 type 的对象Login。当您编写此行时,它只是指向 a 的指针null,直到您调用其中任何一个...

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

这将创建该类的一个新实例,然后允许您访问其中的方法,例如login.getPortalHandler();

如果PortalHandler在完成对象后需要保留以供使用,则需要在清理对象之前Login获取对的引用。PortalHandlerLogin

例如...

PortalHandler portalHandler;

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

在此示例中,Login 实例仅在doLogin()方法的长度内存在,在此之后它不再是有效对象。但是,您在完成之前已经引用了该PortalHandler对象,并将其存储为全局变量,因此您可以随时继续使用PortalHandler

于 2012-05-21T02:54:39.543 回答
0

伙计们,我认为问题可能是 user521180 已经login在他的代码中的其他地方创建了一个实例,该实例进一步创建了一个实例,PortalHandler他现在想name从该PortalHandler对象访问。

您的解决方案让他做的是创建另一个login对象并name通过这个新创建的对象进行访问,该对象可能具有完全不同的值,name因为它将是name由不同的PortalHandler.

@ user521180:如果是这种情况,那么您还需要在该代码中有一个方法(或全局变量),它创建一个login对象,该对象以某种方式返回PortalHandler. 因为在堆中检索其引用丢失或无法访问的对象的引用是不可能的(有些人可能不同意它的不可能部分)。

于 2012-05-21T04:34:56.067 回答