介绍
该帖子显示了如何使用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。