我知道这听起来有点奇怪,但我会解释我想避免的事情。
我有一个包含一些数据的bean类。这个bean类可以从两个不同的源构建。我为每个我通过构造函数的源创建了一个枚举。
然后我需要在构造函数内的枚举上switch
以区分这两者。我知道我可以重载构造函数,但问题是两个源都提供了Map<String,Object>
。
我想知道是否有办法以任何方式将枚举值视为构造函数的最终值?
public PromotedItemRecord(Map<String, Object> record, source recordSource) {
switch(recordSource)
....
}
public enum source
{
fromDB,
fromAjax;
}
甚至可以这样做吗?
答案 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);
}
}