参数字符串为null时,int compareTo()应该返回什么?
有人说,当输入参数为null时,compareTo()应该抛出NullPointerException。但是,我正在实现一个类,该类需要将字段与String类型进行比较。这些字段不是必需的。我想知道在这种情况下
1)输入为空时应该返回什么?在字典上,任何非空字符串都应该大于或小于空吗?
和
2)如果认为这是不良做法,是否有任何支持的论据?我应该强迫用户改用空字符串吗?如果使用空字符串,这不会混淆该字段不适用的情况和该字段为空的情况吗?如果必须抛出异常,那么除了在手册中警告用户外,我还能/应该做什么?
编辑:我可能在这里不能清楚地表达自己,但是在我实现的程序中,可能为null的字符串是所有字段或一个类,不应为null。换句话说,compareTo()使用的对象不能为null,只能是其私有字段。因此,在这种情况下,我相信如果我正确地实现compareTo(),就不会违反传递要求,因为具有空字段的类将始终被视为相同。我是对还是错?
谢谢大家的回答!
回答:
是的,允许null
实例字段没有问题-
只要确保已定义其排序顺序即可。最自然的做法是将其放在所有真实字符串之前或之后,但是您可以在这里做任何事情,只要始终如一。(例如,您可以排序null
为"null"
。)
这是单个成员的示例实现:
class Example implements Comparable<Example> { @Nullable
private String member;
// TODO: getter, setter, constructor, ...
public int compareTo(Example that) {
if(this.member == null)
if(that.member == null)
return 0; //equal
else
return -1; // null is before other strings
else // this.member != null
if(that.member == null)
return 1; // all other strings are after null
else
return this.member.compareTo(that.member);
}
}
请注意,Comparable.compareTo()的规范仅具有一个约束o.compareTo(null)
(其行为应类似于-
null.compareTo(o),即抛出NullPointerException),而不涉及null
字段的处理方式(它根本没有提及字段,因此类可以只要确保反对称性,自反性和可传递性,就可以返回任意值)。
以上是 参数字符串为null时,int compareTo()应该返回什么? 的全部内容, 来源链接: utcz.com/qa/418640.html