0

Login.java

PortalHandler portalHandler = new PortalHandler(dataString);
...
public PortalHandler getPortalHandler(){
        return portalHandler;
    }

PortalHandler.java

public String getName()
{
return name;
}

ThirdClass.java login.javaによって作成されたそのインスタンスの名前を取得したいのですが、以下はnullポインターエラーを返します

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。ただし、使用する前に(またはのコンストラクターの 1 つ)で初期化する必要があります。loginnew Login()Login

于 2012-05-21T02:49:22.637 に答える
2

私の推測ですが、あなたの問題は、複数の Login 変数があり、そのうちの 1 つは null ではなく、表示され、もう 1 つは表示されず、null であり、あなたがしようとしていることにあるのだろうかと思います。メソッドを呼び出します。表示されたものへの参照が必要です。

これに答えてください: すでに Login オブジェクトを表示していますか?

その場合、メソッドを呼び出すには、そのLogin オブジェクトへの参照が必要です。getPortalHandler()

于 2012-05-21T02:53:48.360 に答える
2

あなたの答えは、「別のクラスによって作成されたクラスのインスタンスをどのように使用できますか?」という質問の中にあります。

インスタンスを使用するには、まずインスタンスを作成する必要があります。次の行があります...

Login login;

これはインスタンスを作成するのではなく、 type のオブジェクトを保持できるLogin変数を宣言するだけです。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にアクセスしたいということだと思います。namePortalHandler

あなたのソリューションが彼にやらせているのは、別のオブジェクトを作成し、この新しく作成されたオブジェクトを介してloginアクセスすることです。これは、別のによって作成された別の文字列であるため、完全に異なる値を持つ可能性があります。namenamenamePortalHandler

@ user521180:この場合、そのコードにメソッド(またはグローバル変数)も含める必要があります。これにより、loginオブジェクトが作成され、何らかの形で。のインスタンスが返されますPortalHandler。参照が失われたりアクセスできなくなったりするヒープ内のオブジェクトへの参照を取得することは不可能であるためです(一部のオブジェクトは、その不可能な部分に同意しない場合があります)。

于 2012-05-21T04:34:56.067 に答える