java - 如何从代码中删除静态方法(以及如何替换它们)

标签 java static-methods instance-methods

我对编程和 Java 非常陌生,所以你知道......

我正在开发一个代码/程序框架(学校作业),它具有以下描述,实现并测试命令控制程序的框架,它旨在用于跟踪狗的狗日,程序第一阶段必须接受的命令如下: - 登记新狗 -增加年龄 - 列出狗 -移除狗 -退出

这些命令中唯一应该正确工作的命令是 exit,它应该打印一条程序已终止的消息,然后终止该程序。这必须通过关闭命令行来完成,而不是通过不能使用 System.exit 来完成。 其他命令应该只打印一个简短的文本,告诉您指定了哪个命令。该文本必须包含如上所述的完整命令名称,以便测试程序可以识别它们。一个技巧是还接受其他更短的命令,以便您自己的测试变得更容易。”

非功能性要求之一是除主字符串外不得使用任何静态方法或变量。

因此,我的问题是;如何从程序框架中删除静态方法?我真的很难理解这一点!

import java.util.Scanner;

public class ProgramSkeleton {

    static Scanner input = new Scanner(System.in);

    public static void initialize() {
        System.out.println("Welcome to the dog register!");
        System.out.println("Write 0 to register new dog");
        System.out.println("Write 1 to increase age");
        System.out.println("Write 2 to list dogs");
        System.out.println("Write 3 to remove dog");
        System.out.println("Write 4 to exit");
    }

    public static void runCommandLoop() {
        boolean done;
        do {
            String command = readCommand();
            done = handleCommand(command);
        } while (!done);
    }

    public static String readCommand() {
        System.out.print("> ");
        String command = input.nextLine();
        return command;
    }

    private static boolean handleCommand(String command) {
        switch (command) {
        case "0":
        case "register new dog":
            System.out.println("You have chosen register new dog.");
            return true;
        case "1":
        case "increase age":
            System.out.println("You have chosen increase age.");
            return true;
        case "2":
        case "list dogs":
            System.out.println("You have chosen list dogs.");
            return true;
        case "3":
        case "remove dog":
            System.out.println("You have chosen remove dog.");
            return true;
        case "4":
            break;
        default:
            System.out.println("unknown command");
            return false;
        }
        return false;
    }

    public static void closeDown() {
        System.out.println("Goodbye!");
    }

    public static void main(String[] args) {
        initialize();
        runCommandLoop();
        closeDown();
    }

}

最佳答案

而不是调用

    initialize();
    runCommandLoop();
    closeDown();

创建程序骨架的新实例...

    ProgramSkeleton skeleton = new ProgramSkeleton();
    skeleton.initialize();
    skeleton.runCommandLoop();
    skeleton.closeDown();

这将允许您从所有其他方法签名中删除 static 关键字,因为它们现在与 ProgramSkeleton 类的实例关联。

关于java - 如何从代码中删除静态方法(以及如何替换它们),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54109304/

相关文章:

java - 为什么eclipse需要多次导入?

java - 使用扫描仪 JAVA 初始化数组

c++ - 从 C++ 中的静态方法访问非静态类变量

java - 调用静态方法后重用类

实例方法上的Python装饰器

oop - 从数据库检索行的 search/get 方法应该是实例方法还是静态方法?

java - 如何限制 JSP 的点击计数器?

java - Jmock如何与HttpSession和HttpServletRequest一起使用

c++ - 有什么比使用静态整数更好的存储信息的方法? C++

ruby-on-rails - Rails - 在模型中动态定义实例方法