如何调整我的代码以供不同实体使用?

时间:2013-12-13 21:32:58

标签: java output

我已经开始调整我的代码库的旧部分,并意识到我犯了过度使用System.out.printf()方法的错误。以前该类将处理由操作服务器的CLI用户提供的命令,但是现在我添加了连接客户端的功能,基本上成为管理员(假设初始CLI用户已经发布了admin状态)。 为了节省重写我的很多代码库,我认为最好的想法是使用与CLI用户相同的类/方法发出管理客户端给出的某些命令(因此客户端的命令与CLI具有完全相同的效果)用户的命令,因此客户端可能会看到CLI用户会输出相同的输出。

我的问题是我用于CLI用户命令的方法过度使用printf()中的System.out方法来输出命令。如何调整此类,以便CLI用户和客户端可以获得相同的输出。

需要注意的事项:

  • client指的是远程连接的用户的Socket连接,并且使用的是在服务器上注册的用户名。

  • 某些方法的输出包含需要以与事件“实时”对应的方式给出的字符串;因此,从该方法返回输出字符串将不适合这种情况。

  • 以下是概述该问题的类的非常粗略'伪'副本。我愿意通过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]);
    }

1 个答案:

答案 0 :(得分:2)

您可以创建自己的PrintStream并在调用遗留代码之前将其分配给System.out。所有对System.out的来电都将写入您的信息流。