我的一位同事决定宣布一些这样的API代码:
public interface Filter<T> {
/**
* Test whether the given input is valid.
* @param input the input
* @return null for neutral, {@code Boolean.TRUE} for accepted and {@code Boolean.FALSE} for rejected.
*/
Boolean apply(T input);
}
Run Code Online (Sandbox Code Playgroud)
这个想法引发了对IRC的战争.虽然有些人提倡这种Boolean方法,但其他人认为这是不好的做法,应该使用三个元素的枚举来表示个体状态,如下所示:
public interface Filter<T> {
Result apply(T input);
enum Result {
ACCEPT, UNKNOWN, DENIED;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在性能,可读性,可维护性方面,或者,如果真的重要,那么代码越少,生产中的最佳实践是什么?
编辑:在这里,接受,未知(或中立),拒绝(或拒绝)是@erickson的意思.如果你感到困惑,如果你感到困惑,请参考他的anwser.
在回应"搁置"时,我澄清说我的问题主要涉及:*是否有明确的约定?*这是接受anwser的原因
该至少astonishement的原则,建议使用布尔值仅适用于true/false和enumS代表别的,比如{ Trueish, Falsish, Undecideish }.此外,与之不同的是Boolean,您可以实际记录其enum值,以便立即明确MyEnum.Truieish在应用程序的上下文中实际意味着什么.