返回多个枚举值的最佳方法是什么?(java和C#)

Gor*_*son 0 c# java enums bit-fields

更多原始内容被删除,以使问题更容易参考:

所以我有一个House班级有一个方法House.buy(Person p),导致这个人买房子.我想知道是否可以让人买房子,所以我也有一个方法House.tryBuy(Player p),如果人可以买房子.我有一个枚举BuyState与像值OK,NotEnoughMoneyAlreadyOwned.有几个不同的条件需要满足,客户想知道哪个失败了.但是如果多个条件失败怎么办?我可以有一个等级,比如House已经拥有而且Person没有足够的钱,返回BuyStates.AlreadyOwned.但这只能让我告诉客户一件事.

我可以有N个单独的条件和一个带有N*N值的枚举,ConditionA_AND_ConditionB_ANDConditionC但是由于几个原因这根本没有意义.我知道有些字段,每个条件都有一点,但它们看起来太低级,实现起来很烦人,而且不可扩展.所以我需要一种从枚举中返回值列表的方法,那么这样的类如何:

class C<type_of_enum> {
    private List<type_of_enum> values;

    //etc etc
}
Run Code Online (Sandbox Code Playgroud)

这是"最好的"设计吗?

(保持关于java和C#的问题以保持答案有效)

Mic*_*ers 12

在Java中,最自然的方法是使用EnumSet.构建一个的一个例子:

return EnumSet.of(BuyConditions.NotEnoughMoney, BuyConditions.AlreadyOwned);
Run Code Online (Sandbox Code Playgroud)


Joã*_*elo 8

在C#中,我会寻找一个标志枚举.

检查设计标志枚举.


Eri*_*ert 7

这是"最好的"设计吗?

这似乎是一个奇怪的设计.在用软件对现实世界进行建模时,为了使模型反映现实而付出代价; 这些模型更易于理解,维护和扩展.

首先,房子不是买人的东西.一个人是买房子的东西."购买"方法应该是"人",而不是"房子".

其次,房子不是决定房子是否可以买的东西.房屋的所有者是决定是否可以购买房屋的实体.(为什么会出现"已经拥有"的错误情况?当然房子已经拥有了.有人拥有它.)

第三,你可能不得不考虑在多个买家可能试图一次性购买房屋的世界中会发生什么.实际上,卖方收集各种报价并进行还价,销售可能取决于其他事件,等等.模型中是否应该包含所有这些内容?如果是的话,在哪里?可能在代表所有者的对象的状态中,因为所有者是正在协商的事物.

第四,实际上,购房交易通常涉及可信赖的第三方进行托管,以及其他各方,例如卖方和买方的贷方可能提供资金或持有留置权.这些派对是否反映在这个模型中?

第五,如果你打算在你的模型中添加"为什么你不买这套房子的原因",那么你所描述的是一个政策体系.在这种情况下,将策略表示为系统中的第一类对象,以便可以像处理任何其他对象一样对它们进行操作.业主有关于他们将在何种条件下出售的政策.银行有关于贷款条件的政策.等等.

在这个模型中,您的问题变成"询问政策解决引擎,如果买方满足每个相关机构的政策树所施加的所有必要条件,以便购买给定的房屋".换句话说,问题是"可以X买Y?" 不是X或Y要弄清楚的; 这是一个解决问题的政策解决方案引擎的问题,而这就是为什么X会为了从Z购买Y而未能实现的政策列表.

合理?