是否可以为特定的枚举设置构造函数?

时间:2014-12-27 08:47:13

标签: java enums

我知道这听起来有点奇怪,但我会解释我想避免的事情。

我有一个包含一些数据的bean类。这个bean类可以从两个不同的源构建。我为每个我通过构造函数的源创建了一个枚举。

然后我需要在构造函数内的枚举上switch以区分这两者。我知道我可以重载构造函数,但问题是两个源都提供了Map<String,Object>

我想知道是否有办法以任何方式将枚举值视为构造函数的最终值?

public PromotedItemRecord(Map<String, Object> record, source recordSource) {
     switch(recordSource)
     ....
}

public enum source
{
    fromDB,
    fromAjax;
}

甚至可以这样做吗?

1 个答案:

答案 0 :(得分:1)

在多个构造函数采用相同类型的参数的情况下,应该避免完全暴露构造函数:由于构造函数名称无法更改,因此调用它们的用户必须搜索文档或者可能猜测是什么上。

一种常见的方法是将构造函数设为私有,并提供工厂方法来代替其重载:

class PromotedItemRecord {
    private PromotedItemRecord(Map<String, Object> record, source recordSource) {
        ... // Do the magic here
    }
    public static recordFromAjax(Map<String, Object> record) {
        return new PromotedItemRecord(record, source.fromAjax);
    }
    public static recordFromDb(Map<String, Object> record) {
        return new PromotedItemRecord(record, source.fromDb);
    }
}