当前位置: 首页 > 面试题库 >

在Java中定义错误代码/字符串的最佳方法?

乌杰
2023-03-14
问题内容

我正在用Java编写Web服务,并且 试图找出定义错误代码及其相关错误字符串的最佳方法
。我需要将数字错误代码和错误字符串分组在一起。错误代码和错误字符串都将发送到访问Web服务的客户端。例如,当发生SQLException时,我可能要执行以下操作:

// Example: errorCode = 1, 
//          errorString = "There was a problem accessing the database."
throw new SomeWebServiceException(errorCode, errorString);

客户端程序可能会显示以下消息:

“发生了错误#1:访问数据库时出现问题。”

我的第一个想法是使用一个Enum错误代码并重写toString方法以返回错误字符串。这是我想出的:

public enum Errors {
  DATABASE {
    @Override
    public String toString() {
      return "A database error has occured.";
    }
  },

  DUPLICATE_USER {
    @Override
    public String toString() {
      return "This user already exists.";
    }
  },

  // more errors follow
}

我的问题是:
还有更好的方法吗?我希望使用代码中的解决方案,而不是从外部文件中读取。我正在为此项目使用Javadoc,并且能够内联记录错误代码并在文档中自动更新它们将很有帮助。


问题答案:

好吧,当然可以更好地实现枚举解决方案(通常非常不错):

public enum Error {
  DATABASE(0, "A database error has occured."),
  DUPLICATE_USER(1, "This user already exists.");

  private final int code;
  private final String description;

  private Error(int code, String description) {
    this.code = code;
    this.description = description;
  }

  public String getDescription() {
     return description;
  }

  public int getCode() {
     return code;
  }

  @Override
  public String toString() {
    return code + ": " + description;
  }
}

您可能需要重写toString()来仅返回描述-不确定。无论如何,主要要点是您不需要为每个错误代码分别覆盖。还要注意,我已经明确指定了代码,而不是使用序号-
这使更改顺序和以后添加/删除错误更加容易。

不要忘记这根本不是国际化的,但是除非您的Web服务客户端向您发送语言环境描述,否则您就无法轻易地将其国际化。至少他们会在客户端上使用错误代码供i18n使用…



 类似资料:
  • 问题内容: 我在尝试搜索字符串中的子字符串时遇到问题。该子字符串可能在字符串中也可能不在字符串中。 我知道是否可以完成的两种方法是: 正则表达式 但是,还有其他“优化”方式吗?你会怎么做? Ruby可以提供更好的答案吗?由于我们使用jRuby,因此答案可以是Ruby或Java。 问题答案: 在Ruby中,使用方法: 返回。

  • 问题内容: 我正在使用解析Java中的字符串。但是,没有直接解析字符串的函数,所以我改为这样做: 这是最好的方法吗?我觉得必须有一个更简单的方法…谢谢! 问题答案: 直接回答您的问题-据我所知,没有更好的方法。使用输入源是因为它比较通用,可以处理来自文件,字符串或跨线的输入,这是我的理解。 您还可以尝试使用SAX Xml解析器- 它稍微有点基础,并且使用了Visitor模式,但是可以完成工作,对于

  • 问题内容: 我正在尝试优化在JavaScript中对字符串进行二进制搜索的函数。 二进制搜索要求您知道键是枢轴还是枢轴。 但这需要JavaScript中的两个字符串比较,这与同类语言不同,后者具有返回三个值(小于,等于,大于)的函数。 JavaScript中是否有这样的本机函数可以返回三进制值,以便在二进制搜索的每次迭代中只需要一个比较? 问题答案: 您可以使用该方法。

  • 我有一个ServerEndpoint,它将累加不同的JSON格式。由于每个消息类型只允许一个消息处理程序,因此我的一个解码器必须将消息转换为相应的Java对象。 在我的解码器中,我试图使用ObjectMapper类将累犯的消息转换为子类或子类(这会产生相同的接口)。ObjectMapper类有一个readValue方法,它需要我试图将json映射到的类型,当它不能转换为指定的类型时,它将抛出异常。

  • 问题内容: 如果我传递的字符串包含这样的逗号分隔键/值对 等 似乎有比解析然后迭代更好的方法。 根据Java中的键名从该字符串检索值的最佳方法是什么? 问题答案: 您可以创建自己的CSV解析器,虽然它不是很复杂,但是假设您使用的是标准CSV格式,那么在某些特殊情况下还是很实用的。 但是为什么要重新发明轮子… 您可以尝试查找CSV解析器,例如 打开CSV 超级CSV Apache Commons 还

  • 问题内容: 我有以下字符串; 等级,用户名和消息的字符每次都不同。将其分为三个独立变量(用户名,等级和消息)的最佳方法是什么? 我已经尝试过: 但这会抛出错误。提前致谢! 问题答案: 使用Java对正则表达式()的支持,并让正则表达式匹配这三个部分。 例如这个: Java代码段,略微改编自Ian F. Darwin的“ Java Cookbook”(O’Reilly): 输出: