用Java中的枚举代替IF-ELSE语句
#初学者 #教程 #java #枚举

介绍

该帖子显示了如何使用Java中的枚举更改if-else语句的简单方法。在该教程上,我们将使用仅使用if-else语句编写的简单应用程序,并通过使用构造函数创建枚举来删除所有应用程序。

示例程序

我们将用于本教程的Java程序是一个简单的命令行应用程序,该应用程序在用户提供所需消息后返回HTTP状态代码。

例如,如果我们用参数“成功”执行它,则其返回为“ 200”。

旧代码

我们的应用程序由几个if-else语句组成。因此,根据用户的消息,对其在四个条件下进行了测试,以定义相应的HTTP状态代码并将其退还给用户。

public class Application {

    public static void main(String[] args) {

        if (args.length < 1) {
            System.out.println("No args provided!");
            System.exit(0);
        }

        String providedMessage = args[0];
        int returnCode = 0;

        if ("SUCCESS".equalsIgnoreCase(providedMessage)) {
            returnCode = 200;
        } else if ("CREATED".equalsIgnoreCase(providedMessage)) {
            returnCode = 201;
        } else if ("MOVED".equalsIgnoreCase(providedMessage)) {
            returnCode = 301;
        } else if ("UNAUTHORIZED".equalsIgnoreCase(providedMessage)) {
            returnCode = 401;
        }

        System.out.println("Your HTTP code is: " + returnCode);
    }
}

运行该Java程序:

marcos@Desktop: javac Application.java
marcos@Desktop: java Application success
Your HTTP code is: 200.

重构代码

为了使其成为可能,我们可以使用Java Enums的属性:构造函数。使用它,对于为我们的枚举提供的每个值,我们可以定义默认返回值。

写我们的枚举

要完成的第一个更改是定义我们的枚举类。

enum HttpCode {

    SUCCESS,
    CREATED,
    MOVED,
    UNAUTHORIZED;

}

尽管宣布了类,但我们不允许使用它来替换我们的if-else语句,因为java将不知道我们的枚举HttpCode后需要返回的代码。

通过定义HttpCode的构造函数,这可以非常简单。

enum HttpCode {

    SUCCESS(200),
    CREATED(201),
    MOVED(301),
    UNAUTHORIZED(401);

    private int code;

    HttpCode(int code) {
        this.code = code;
    }

    public int getCode(){
        return this.code;
    }
}

请注意,在我们的枚举类中创建了一个字段code。由于HttpCode的每个选项都有为构图定义的默认状态,因此在使用方法HttpCode.valueOf(String message)进行实例化后,默认值之一将存储在field code中,可以通过方法HttpCode.getCode().

获得。

调整主要方法

现在我们有了一个枚举类,我们只需要更改原始的main代码即可使用它。

public static void main(String[] args) {

    if (args.length < 1) {
        System.out.println("No args provided!");
        System.exit(0);
    }

    String providedMessage = args[0];
    HttpCode httpStatusCode = HttpCode.valueOf(providedMessage.toUpperCase());

    System.out.println("Your HTTP code is: " + httpStatusCode.getCode());
}

完成!现在,我们的应用程序可以为用户返回提供的消息的HTTP状态代码。以下代码显示了我们的整个班级,已经进行了重构。

public class Application {

    public static void main(String[] args) {

        if (args.length < 1) {
            System.out.println("No args provided!");
            System.exit(0);
        }

        String providedMessage = args[0];
        HttpCode httpStatusCode = HttpCode.valueOf(providedMessage.toUpperCase());

        System.out.println("Your HTTP code is: " + httpStatusCode.getCode());
    }
}

enum HttpCode {

    SUCCESS(200),
    CREATED(201),
    MOVED(301),
    UNAUTHORIZED(401);

    private int code;

    HttpCode(int code) {
        this.code = code;
    }

    public int getCode() {
        return this.code;
    }
}

运行该Java程序:

marcos@Desktop: javac Application.java
marcos@Desktop: java Application UNAUTHORIZED
Your HTTP code is: 401.

我们可以考虑的第一件事是:“好吧,我删除了我的陈述,但我也提高了代码行的数量!”实际上,似乎我们的应用程序更大得多,但是在实际情况下,可以减少线路的数量,因为可以在代码的另一部分重复枚举。

此外,使代码更可读,因为IF-ELSE结构有多种验证,不再存在,Java开始为我们进行此验证。

另一个好处是,我们可以在Enmums的类中添加更多选项,而无需在状态代码验证的所有情况下进行更改,仅在创建的枚举中存在。

结论

这是一个简单的例子,而不是太多适用的例子。但是,它可以证明使用枚举的更好方法。还要注意的是:不要更改您看到的每个if-else语句,而无需考虑后果。这是如何以其他方式做事的想法,每种情况都不同,您必须检查,同意; d?

仅此而已!
请在评论上留下您的建议,更正和测试。感谢您的阅读:d。