Все зависит от того, что такое Qualities
и что они делают. Если список достаточно стабилен, enum
s может быть хорошим решением:
enum Quality {
MERCHANT,
STOCKBROKER,
...
}
Хорошая вещь о enum
s в том, что они в основном являются классами, поэтому могут реализовывать интерфейсы и иметь состояние и поведение. Они также поставляются с полезными вспомогательными классами:
Set<Quality> = EnumSet.of(MERCHANT, STOCKBROKER);
и затем вы можете использовать все функции Set
, такие как contains()
и т. Д.
Но я не могу сказать вам, подходит ли вам это решение, не зная дополнительной информации.
Редактировать: общая отправная точка для этого во многих языках - enums. В C / C ++ / C # это будет выглядеть примерно так:
if (merchantType == STOCKBROKER) { ... }
Вот как лучше перечисления в Java. Допустим, вы определили другое перечисление для типа акций:
enum StockType {
LISTED_EQUITIES,
MANAGED_FUNDS
}
Если вы делаете предположение, что данный тип продавца продает один тип вещи:
enum MerchantType {
STOCKBROKER(StockType.LISTED_EQUITIES),
FINANCIAL_ADVISER(StockType.MANAGED_FUNDS);
private final StockType stockType;
MerchantType(StockType stockType) {
this.stockType = stockType;
}
public StockType getStockType() {
return stockType;
}
}
поэтому вместо того чтобы сказать:
StockType stockType;
if (merchantType == MerchantType.STOCKBROKER) {
stockType = StockType.EQUITIES;
}
...
Вы говорите:
StockType stockType = merchantType.getStockType();
Перечисления Java имеют состояние и поведение . Это чрезвычайно мощная концепция.
Но вы можете сделать лучше, чем это. Вместо того, чтобы предполагать одну акцию на торговца, это лучше обрабатывается поведением:
enum MerchantType {
STOCKBROKER,
FINANCIAL_ADVISER;
private static final Map<MerchantType, Set<StockType>> STOCK_TYPES;
static {
STOCK_TYPES = new EnumSet<MerchantType, Set<StockType>>(MerchantType.class);
STOCK_TYPES.put(STOCKBROKER, EnumSet.of(StockType.LISTED_EQUITIES));
STOCK_TYPES.put(FINANCIAL_ADVISER,
EnumSet.of(StockType.LISTED_EQUITIES, StockType.MANAGED_FUNDS));
}
public boolean canSell(StockType stockType) {
Set<StockType> stockTypes = STOCK_TYPES.get(this);
return stockTypes != null && stockTypes.contains(stockType);
}
}
В этот момент ваш код становится:
if (merchantType.canSell(StockType.LISTED_EQUITIES)) {
...
}
, которое является гораздо более естественным, читаемым и расширяемым решением.