2012-05-21 4 views
0

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

Как это можно сделать?

+1

Поскольку вы никогда не создавали экземпляр класса Login! Таким образом, он будет равен нулю. Решение - это создание регистрационного экземпляра, например: 'Login login = new Login();' –

ответ

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), прежде чем вы сможете его использовать.

+0

это означало бы, что он выполнит все свои задачи еще раз, даже подумал, что я закончил с логином и мне нужен PortalHandler? – code511788465541441

+1

@ пользователь521180: это не имеет смысла. Если вам нужен объект «Вход», вам нужен объект «Вход». Период. –

+0

@ user521180 Если вы разместите больше своего кода от 'ThirdClass', я могу дать вам лучшее представление о том, что делать. –

2

Большая догадка с моей стороны, но мне интересно, ваша проблема в том, что у вас более одной переменной входа, которая не является нулевой и отображает, а другая, которая не была показана, равна нулю и что вы пытаюсь вызвать метод. Вам нужна ссылка на ту, которая была отображена.

Ответьте: вы уже показываете объект входа?

Если это так, то вам нужна ссылка на , что Войти объекта, чтобы позвонить по методу getPortalHandler().

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

В этом примере экземпляр Войти существует только для длины doLogin() метода, после чего он больше не является допустимым объектом. Однако перед тем, как вы закончили, вы взяли ссылку на объект PortalHandler, и они сохранили его как глобальную переменную, поэтому вы сможете продолжать использовать PortalHandler всякий раз, когда захотите.

+0

добавил возможную проблему с ответами. PLZ проверить это! – WickeD

0

Ребят я думаю, что проблема может быть, что user521180 уже создала экземпляр login где-то в его кода, который в дальнейшем создал экземпляр PortalHandler, и теперь он хочет получить доступ к name из этого PortalHandler объекта.

Что ваши решения заставляют его сделать, это создать еще один login объект и доступ name через этот вновь созданный объект, который может иметь совершенно другое значение в name, потому что это был бы другой name Строка создан другой PortalHandler.

@ user521180: если это так, то вам необходимо также иметь метод (или глобальную переменную) в этом коде, который создает объект login, который каким-то образом возвращает экземпляр PortalHandler. Потому что получение ссылки на объект в куче, ссылка на которую утеряна или недоступна, невозможна (некоторые могут не согласиться с невозможной ее частью).

Смежные вопросы