Java 如何调整代码以供不同实体使用?
我已经开始修改代码库中较旧的部分,并意识到我犯了过度使用Java 如何调整代码以供不同实体使用?,java,output,Java,Output,我已经开始修改代码库中较旧的部分,并意识到我犯了过度使用System.out.printf()方法的错误。以前,该类将处理操作服务器的CLI用户发出的命令,但是现在我添加了连接客户端的功能,使其基本上成为管理员(假设初始CLI用户已向客户端发出admin状态)。 为了避免重写大量代码库,我认为最好的办法是使用与CLI用户相同的类/方法发出管理客户端发出的某些命令(因此客户端的命令与CLI用户的命令具有完全相同的效果,因此客户端可能会看到与CLI用户相同的输出) 我的问题是,我用于CLI用户命令的
System.out.printf()
方法的错误。以前,该类将处理操作服务器的CLI用户发出的命令,但是现在我添加了连接客户端的功能,使其基本上成为管理员(假设初始CLI用户已向客户端发出admin
状态)。
为了避免重写大量代码库,我认为最好的办法是使用与CLI用户相同的类/方法发出管理客户端发出的某些命令(因此客户端的命令与CLI用户的命令具有完全相同的效果,因此客户端可能会看到与CLI用户相同的输出)
我的问题是,我用于CLI用户命令的方法在命令输出时使用了System.out
中的printf()
方法。如何调整此类,以便CLI用户和客户端都可以获得相同的输出
需要注意的事项:
指的是用户的客户端
连接,该用户正在远程连接,并使用在服务器上注册的用户名套接字
- 某些方法的输出包含需要与事件“实时”对应的字符串;因此,在这种情况下,从方法返回输出字符串是不合适的
- 下面是这个类的一个非常粗略的“伪”副本,概述了这个问题。我愿意通过GitHub链接或类似链接向人们展示主类,但我不想一开始就用代码来解决这个问题
public boolean executeCommand(String[] command) {
switch (command[0]) {
case "kill":
return kill(command);
case "clients":
if (!clientList.isEmpty())
for (String username: clientList.keySet())
System.out.printf("%s\t%s\n\n", username, clientList.get(username).getAddress());
else
System.out.println("No clients connected!");
return true;
// ...and so on
default:
System.out.printf("\"%s\": command unknown.\n Type \"help\" for a list of commands.\n", command[0]);
}
}
private boolean kill(String[] args) {
args[1].disconnect(args[2]);
System.out.printf("Killed %s with reason %s", args[1], args[2]);
}
在调用旧代码之前,您可以创建自己的
PrintStream
,并将其分配给System.out
。所有对System.out
的调用都将写入您的流。对于长时间的延迟表示抱歉,我们正在等待其他可能的答案,然后才选择一个。这似乎很管用,谢谢。