3

我正在编写一个将在 Java 中模拟 Kerberos 协议的代码。我有一个服务器类和一个客户端类。但是有些内容是静态的,而其他内容不是,加上套接字,我至少可以说是混淆了。我认为该协议的细节在这个问题中是任意的。

我有一个 Server 类,它调用一个 ServerThread 类:

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(通过getter/setter或修改构造函数)?如果是这样,请传递引用,然后您可以调用server.someMethod(),假设server是变量名。

如果没有,您someMethod()作为静态方法是否有意义?如果将其设为静态方法是安全的,您可以这样做Server.someMethod().

于 2012-04-20T15:47:04.930 回答
2

当您分配一个Server(大概只有其中一个)时,将其写入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 回答