这个网站让我感到幽默感 - http://www.antiifcampaign.com/但是在你使用if语句的每种情况下,多态性都可以工作吗?
我注意到java.lang.Boolean类存在一个无法解析空值的问题.我知道它有parseBoolean静态方法但是因为它的签名状态它只接受String而不是Object.
换句话说,它具有以下特征:
public static boolean parseBoolean(String s)
Run Code Online (Sandbox Code Playgroud)
但不是:
Boolean.parseBoolean(Object)
Run Code Online (Sandbox Code Playgroud)
在不降低NullPointerException的情况下检查布尔值的最佳方法是什么?
我的一位同事决定宣布一些这样的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的原因