如何使用由其他类创建的类的实例?

时间:2012-05-21 02:45:46

标签: java

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();

怎么做?

4 个答案:

答案 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}的实例}。因为检索对引用丢失或无法访问的堆中的对象的引用是不可能的(有些人可能不同意它的不可能部分)。