gpt4 book ai didi

java - 根据传入方法的参数之一创建包含 switch 语句的方法

转载 作者:行者123 更新时间:2023-12-03 23:02:15 29 4
gpt4 key购买 nike

我正在编写一个方法,createMessage(),它将采用两个参数 - 消息类型和消息本身。

到目前为止,我已经通过使用 String 类型的两个参数实现了这一点。消息的类型将是以下三种之一;指示、错误或成功。该方法包含一个 switch 语句,该语句将根据消息的类型以特定方式编辑消息。

该方法看起来像这样:

public void createMessage(String messageType, String message) {
String output = "";
switch(messageType) {
case "instruction":
output = "INSTRUCTION: " + message + "\n";
//edits required for an instruction
break;
case "error":
output = "ERROR: " + message + "\n";
//edits required for an error
break;
case "success":
output = "SUCCESS: " + message + "\n";
//edits required for a success
break;
default:
throw new IllegalArgumentException("Invalid message type: " + messageType);
}

此方法将被称为 createMessage("instruction", "Enter your name:");,而我宁愿不必使用引号来给出消息类型 -​​ createMessage(instruction, "Enter your name:");.

问题:实现这一目标的最佳方法是什么?

最佳答案

根据评论,您可以使用如下枚举:

public enum MessageType {
INSTRUCTION, ERROR, SUCCESS;
}

你的方法重构如下:

public void createMessage(MessageType messageType, String message) {
String output = "";
switch(messageType) {
case INSTRUCTION:
output = "INSTRUCTION: " + message + "\n";
//edits required for an instruction
break;
case ERROR:
output = "ERROR: " + message + "\n";
//edits required for an error
break;
case SUCCESS:
output = "SUCCESS: " + message + "\n";
//edits required for a success
break;
default:
throw new IllegalArgumentException("Invalid message type: " + messageType);
}
}

但是如果你真的需要在你的消息实体上有行为,不要将它委托(delegate)给外部方法,而是创建一个 Message 类:

public class Message {
private MessageType type;
private String text;

public Message(MessageType type, String text) {
this.type = type;
this.text = text;
}

public String buildOutput() {
return type + text;
}

// other behaviors here
}

并在您的应用程序中强制执行其职责,以根据类型和文本处理所需的行为。

这将强制执行单一职责原则 (SRP),并且您将拥有更好(和更容易)的可测试性。

关于java - 根据传入方法的参数之一创建包含 switch 语句的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35614278/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com