Java和从int获取枚举的方法命名

hyd*_*yde 2 java enums type-conversion

我有一个枚举,每个枚举映射到一个整数,它与枚举不匹配ordinal().现在我需要一个方法将整数转换为枚举.我认为有两个选择:

  1. 一个具有唯一名称的新方法,例如(惯用?):

    public static MyEnum fromInt(int i) {}
    
    Run Code Online (Sandbox Code Playgroud)
  2. 超载valueOf():

    public static MyEnum valueOf(int i) {}
    
    Run Code Online (Sandbox Code Playgroud)

两者都好,还是其中一个明显不好或好?

提供两者是好还是坏?如果是,它们应该是相同的还是行为略有不同,例如如果i不是有效值则表现不同.

或者是否有一些优于这两者的第三种选择?

我正在寻找一个简短的答案,告诉我们应该如何做以符合既定的Java编码实践.enum将被其他人使用并保持很长时间.请回答一些权威的参考,或强烈的经验,而不是纯粹的意见或更好的感觉.

此外,这个问题不是关于如何实现这个方法,它只是关于它应该如何命名,如果名称取决于确切的行为,与"Java世界"的其余部分最为一致.

Jon*_*eet 6

大概数字意味着什么 - 所以我创建了一个使用该信息的方法.例如:

public enum HttpStatus {
    OK(200),
    ...
    NOT_FOUND(404);

    private int statusCode;

    private HttpStatus(int statusCode) {
        this.statusCode = statusCode;
    }

    public static HttpStatus fromStatusCode(int statusCode) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

只是fromInt没有给出整数的预期含义的任何指示...并且它也不允许int稍后基于替代的查找.