3

JavaでKerberosプロトコルをシミュレートするコードを書いています。サーバークラスとクライアントクラスがあります。しかし、一部のコンテンツは静的であり、他のコンテンツはそうではありません。さらに、ソケットもありますが、控えめに言っても混乱しています。私が信じるプロトコルの詳細は、この質問では恣意的です。

ServerThreadクラスを呼び出すServerクラスがあります。

public class Server{

    public void someMethod(){ /* some code */ }

    public static void main(String args[]){ 
        ServerSocket serverSocket = new ServerSocket(port);
        new ServerThread(serverSocket.accept()).start();
    }
}

public class ServerThread extends Thread{
    /* constructor (takes serverSocket from Server) */

    this.parent.someMethod();
    /* That would call someMethod() from the parent class Server instance
     * that instantiated this.
     */
    }

ServerThreadをインスタンス化するServerクラスの部分が私に与えられたので、そのまま使用する必要があります。私が自分で書いたsomeMethod()メソッドは、ServerThreadから使用したいものです。this.parent.someMethod();というコード行を呼び出す方法はありますか?可能であれば、単一のコントローラークラスから両方のクラスにアクセスする方法はありますか、それとも静的コンテンツと非静的コンテンツはそのアイデアを台無しにしますか?

4

4 に答える 4

4

のインスタンスへの参照を(ゲッター/セッターまたはコンストラクターの変更を介して)に渡すことができますServerServerThread?もしそうなら、参照を渡してから、が変数名であるserver.someMethod()と仮定して、を呼び出すことができます。server

そうでない場合は、someMethod()静的な方法として意味がありますか?静的メソッドにするのが安全な場合は、次のことができます。Server.someMethod().

于 2012-04-20T15:47:04.930 に答える
2

を割り当てるときServer(おそらくそのうちの1つだけ)、それをの静的フィールドに書き込みますServer。次に、を含むどこからでもそのフィールドにアクセスできますServerThread

Server

static Server server; // the one true server in this application

Server.main

server = new Server();

ServerThread

Server.server.someMethod();
于 2012-04-20T15:45:43.863 に答える
0
  class Server extends Thread{

    public void someMethod(){ /* some code */ }

    public static void main(String args[]){ 
      //  ServerSocket serverSocket = new ServerSocket(port);

    }
}

  class ServerThread extends Server{
    /* constructor (takes serverSocket from Server) */
public ServerThread(){
     super.someMethod();

}
于 2012-04-20T15:43:02.610 に答える
0

スレッドに渡すソケットコンテキストクラスインスタンス(serverSocketなどを含むインスタンス)を作成するときは、サーバーインスタンス「this」もロードします。その後、ServerThreadからそのメソッドを簡単に呼び出すことができます。

于 2012-04-20T15:47:17.953 に答える