のインスタンスを作成するために、私はjavaの - どのようにジェネリック型T
public class Server<T extends RequestHandler> {
public void start() {
try{
this.serverSocket = new ServerSocket(this.port, this.backLog);
} catch (IOException e) {
LOGGER.error("Could not listen on port " + this.port, e);
System.exit(-1);
}
while (!stopTheServer) {
socket = null;
try {
socket = serverSocket.accept();
handleNewConnectionRequest(socket);
} catch (IOException e) {
LOGGER.warn("Accept failed at: " + this.port, e);
e.printStackTrace();
}
}
}
protected void handleNewConnectionRequest(Socket socket) {
try {
executorService.submit(new T(socket));
} catch (IOException e) {
e.printStackTrace();
}
}
}
以下のようにサーバーを書いています。しかし、それは実際にはクラスではないようhandleNewConnectionRequest(...)
方法では、私はTのインスタンスを作成することはできません。また、私がsocket
インスタンスを渡して、socket
のリクエストハンドラがOutputStream
とInputStream
になるように、hereというメソッドを使用することはできません。
は、私は上記のような一般的なサーバーを作ることはできませんし、異なるプロトコルハンドラが
Server<HttpRequestHandler> httpServer = new Server<HttpRequestHandler>();
Server<FtpRequestHandler> ftpServer = new Server<FtpRequestHandler >();
Server<SmtpRequestHandler> smtpServer = new Server<SmtpRequestHandler >();
+1。または、サーバーにRequestHandlerFactoryを使用させ、サーバーが要求するたびにこの工場にRequestHandler を作成するよう依頼します。 –
@JBNizetねえ、さらに良い!私は抽象クラス/実装とOOのデザインのための本当に良い友達になるように型パラメータを見つけました。 –