给null一个含义以及两个布尔值以表示过滤中的三元balue是不是很好?

gle*_*e8e 1 java

我的一位同事决定宣布一些这样的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的原因

tuc*_*uxi 5

该至少astonishement的原则,建议使用布尔值仅适用于true/false和enumS代表别的,比如{ Trueish, Falsish, Undecideish }.此外,与之不同的是Boolean,您可以实际记录其enum值,以便立即明确MyEnum.Truieish在应用程序的上下文中实际意味着什么.