在处理Java中的枚举时,我有一个关于最佳实践的问题.假设我有一个java类和一个枚举类,如下所示:
public class Foo {
    private final FooEnum fooEnum;
    public Foo(FooEnum fooEnum) {
        this.fooEnum = fooEnum;
    }
    public Foo(String fooEnum) {
        this.fooEnum = FooEnum.valueOf(fooEnum);
    }
}
public enum FooEnum {
    FOO1,
    FOO2,
    FOO3
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:提供第二个构造函数是否是一个良好的做法,它接受一个字符串来初始化枚举,以便用户可以选择传递枚举或它的字符串等效?如果没有,有什么替代方案?用户是否应负责将字符串转换为枚举?
不,这样做是不好的做法:
FooEnum字符串,那说它是不是很糟糕new Foo(FooEnum.valueOf(str))?如果我传入字符串"bibble"怎么办?这不是一个Foo导致异常被抛出的问题,所以不要涉及Foo那个问题.
通过提供一个String构造函数,你会说"你可以传递给我任何字符串"(其中几乎无限多); 通过提供一个FooEnum构造函数,你说"你可以通过我任何FooEnum",其中有一个非常小的数字.所以你大大限制了有效输入的空间; 并且用户不会猜测有效输入可能是什么.
另一种方法:因为你需要的实例FooEnum在Foo,使车厢通票的用户中的一个实例FooEnum.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           461 次  |  
        
|   最近记录:  |