java函数返回更多布尔的状态类型

时间:2018-01-21 16:34:20

标签: java oop design-patterns enums

如果我只有两个状态(true和false),我的函数可以返回boolean并根据它的返回值我可以做一些事情。

boolean checkFoo(Object foo) {

 // .....
 return true/false;
}

如果我有四种状态:

我可以使用枚举并使用函数返回枚举..

 public enum StateEnum { //... }

 StateEnum checkFoo(Object foo) {

 // .....
 return StateEnum.STATE1/StateEnum.STATE2/StateEnum.STATE3/StateEnum.STATE4;
}

但是这个枚举只是用于这个功能,没有其他用途,这种情况还有其他干净的方法吗?像返回字符串?

3 个答案:

答案 0 :(得分:3)

Enum看起来不错。

枚举实际上不仅会被这个函数使用,还会被所有客户使用,它可以是任意数量的。

Enum绝对是一种比字符串更好的方法,因为你可以将可能的返回值数量限制为4(在你的情况下)。

答案 1 :(得分:1)

拥有以下源代码的CREATE TABLE vectorTab ( id INT NOT NULL AUTO_INCREMENT, -- in case ordering matter parent_id INT NOT NULL, value TEXT, PRIMARY KEY (id), FOREIGN KEY (parent_id) REFERENCES myTable (id) ON DELETE CASCADE ON UPDATE CASCADE ); 示例:

Enum

答案 2 :(得分:0)

这不是您问题的准确答案,但可以作为替代方案。

如果StateEnum没有在其他地方使用,那么听起来你正在泄漏foo对象的内部状态。

你应该做的是告诉foo评估它的状态,即告诉不要问(https://martinfowler.com/bliki/TellDontAsk.html)。这样可以保持封装状态。例如,你可以这样:

class Foo {

    private State state;

    bool isParticularState() {
        return state == ...;
    }

    bool isSomeOtherState() {
        return state == ...;
    }
}

您可以使用枚举或尝试使用州设计模式来表示foo的状态。

这不是一个理想的解决方案,但我认为它使状态比原始代码更加封装。