java - 使用 String Wrapper 是更好的设计吗?

标签 java

有人建议我使用 String Wrapper 而不是 String,目的是明确字符串代表什么。

例如,我有以下枚举。

public enum Priority
{
   PRIORITY_URGENT("urgent"),
   PRIORITY_HIGH("high"),
   PRIORITY_LOW("low");

   private String _piorityLevel;
   private Priority(String level)
   {
     _priorityLevel = level;
   }

   public String getPriorityLevel()
   {
     return _priorityLevel;
   }
   ....
}

像PriorityLevel一样将优先级String包装成一个新的类来明确表示字符串代表优先级是不是更好的设计,如下所示?

public enum Priority
{
   PRIORITY_URGENT(new PriorityLevel("urgent")),
   PRIORITY_HIGH(new PriorityLevel("high")),
   PRIORITY_LOW(new PriorityLevel("low"));

   private PriorityLevel _piorityLevel;
   private Priority(PriorityLevel level)
   {
     _priorityLevel = level;
   }

   public PriorityLevel getPriorityLevel()
   {
     return _priorityLevel;
   }
   ....
}

最佳答案

Java 中缺少程序员定义的隐式转换运算符使得编写字符串包装器有些麻烦。 toString约定会有所帮助,但在许多情况下,转换将是显式的。

想一想您的 API 用户将对 PriorityLevel 执行的常见操作属性(property):他们在任何地方都需要它作为String他们将不得不写

Priority priority = Priority.PRIORITY_URGENT;
String level = priority.getPriorityLevel().toString();

最后toString()通话很烦人。虽然在这种情况下你可以避免它

System.out.println("This job has " + priority.getPriorityLevel() + "priority");

最好完全不用考虑。毕竟,enum已经为您的字符串提供了足够的包装,因此不需要第二层。

关于java - 使用 String Wrapper 是更好的设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42015152/

相关文章:

java - 如何开始逆向工程 SpaceNavigator 外围数据流?

java - 使用java处理规范化中的回车

java - 关于继承和接口(interface)的设计困惑

java - JSpinner 显示不正确

java - 放心。是否可以从请求 json 中提取值?

java - 有人可以帮我处理 Android InputFilter "filter"方法的参数吗? (加上正则表达式)

java - 如何使用独立编译器编译 Xtend 源代码?

java - 检查数字是否在动态变化数字范围内?

java - HikariPool-1 - 无法执行连接的 isValid(),配置连接测试查询 (oracle.jdbc.driver.T4CConnection.isValid(I)Z)

java - 无法将 java Web 应用程序部署到 Netbeans 中的 Tomcat