Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否可以基于菜单命令在两个不同库中的公共类之间切换?_Java_Interface_Jar - Fatal编程技术网

Java 我是否可以基于菜单命令在两个不同库中的公共类之间切换?

Java 我是否可以基于菜单命令在两个不同库中的公共类之间切换?,java,interface,jar,Java,Interface,Jar,在这里的学习模式下,玩Jar文件。不确定这是否可能 我有一个包含3个主要部分的应用程序(服务器):响应、请求和路由器。我的路由器最初是服务器中的一个类。然后我把它拔出来,做成一个单独的罐子。让它起作用。现在我想制作多个jar,并让服务器基于菜单命令使用一个jar。服务器有两个可用的外部库(即JAR)(A和B)。每个都是一个自定义路由器类 我想在服务器菜单中编写如下代码: Server: "Which router do you want to use?" User: "A" *Server

在这里的学习模式下,玩Jar文件。不确定这是否可能

我有一个包含3个主要部分的应用程序(服务器):响应、请求和路由器。我的路由器最初是服务器中的一个类。然后我把它拔出来,做成一个单独的罐子。让它起作用。现在我想制作多个jar,并让服务器基于菜单命令使用一个jar。服务器有两个可用的外部库(即JAR)(A和B)。每个都是一个自定义路由器类

我想在服务器菜单中编写如下代码:

Server:  "Which router do you want to use?"
User:  "A"
*Server uses A's Router.*

这是我的Server run()方法

在尝试连接到多个路由器之前:

public void run() {
    Request request = new Request();
    Router router = new Router();
    Response response = new Response();

    HashMap receivedRequest = request.get(Socket);
    byte[] builtResponse = router.getResponse(receivedRequest);
    response.send(Socket, builtResponse);
    Socket.close();
}
public void run() {
    Request request = new Request();
    Router router
    if "A"
      router = new A.Router(workingDirectory, publicDirectoryPath, routesFilePath, htAccessFilePath);
    else
      router = new B.Router(workingDirectory, publicDirectoryPath, routesFilePath, htAccessFilePath);
    Response response = new Response();

    HashMap receivedRequest = request.get(Socket);
    byte[] builtResponse = router.getResponse(receivedRequest);
    response.send(Socket, builtResponse);
    Socket.close();
}
我的尝试(但不起作用):

public void run() {
    Request request = new Request();
    Router router = new Router();
    Response response = new Response();

    HashMap receivedRequest = request.get(Socket);
    byte[] builtResponse = router.getResponse(receivedRequest);
    response.send(Socket, builtResponse);
    Socket.close();
}
public void run() {
    Request request = new Request();
    Router router
    if "A"
      router = new A.Router(workingDirectory, publicDirectoryPath, routesFilePath, htAccessFilePath);
    else
      router = new B.Router(workingDirectory, publicDirectoryPath, routesFilePath, htAccessFilePath);
    Response response = new Response();

    HashMap receivedRequest = request.get(Socket);
    byte[] builtResponse = router.getResponse(receivedRequest);
    response.send(Socket, builtResponse);
    Socket.close();
}
问题是我的“router”变量必须声明为某种类型(a路由器或B路由器)。如果我制作一个接口,那么我必须在每个Jar中实现接口,而我不能这样做,对吗

想知道这是否可能

如果我制作一个接口,那么我必须在每个Jar中实现接口,而我不能这样做,对吗


是的,你能做到。您可以有一个公开接口的jar a和另一个拥有接口实现并处理接口行为的jar B。请注意,jar B取决于jar A是否存在才能工作。

我很困惑。我的界面不需要在服务器中吗?如果它在服务器中,我如何在两个库(A和B)中引用它。我想我的问题是我应该把接口放在哪里?@Kelly接口应该放在最通用的地方,在那里可以通过其他库访问它们来实现它们,客户端也可以使用它们。如果您是在框架透视图中构建应用程序,那么最好在jar中添加接口。如果您构建的应用程序只是用作客户机(控制台、GUI、web、移动设备),那么请将这些接口放在主jar中。非常感谢。我现在明白了。