如果我只有两个状态(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;
}
但是这个枚举只是用于这个功能,没有其他用途,这种情况还有其他干净的方法吗?像返回字符串?
答案 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
的状态。
这不是一个理想的解决方案,但我认为它使状态比原始代码更加封装。