我看不出制作String.indexOf界面的一部分有任何缺点CharSequence。好处是其他类,如 StringBuffer 或 StringBuilder 也需要实现 indexOf 方法。
那么是否有任何设计原因为什么indexOf应该只是其中的一部分String?
谢谢你。
我看不出制作String.indexOf界面的一部分有任何缺点CharSequence。好处是其他类,如 StringBuffer 或 StringBuilder 也需要实现 indexOf 方法。
那么是否有任何设计原因为什么indexOf应该只是其中的一部分String?
谢谢你。
我不确定这是什么原因,但我可以举一个实现CharSequence. 它是java.nio.CharBuffer。
理论上可以通过循环indexOf()调用来实现。charAt()但它不会像用户期望的那样工作。我们无法区分两种情况:角色尚不存在,角色不存在且不会存在。在第二种情况下indexOf(),应按合同返回 -1。在第一种情况下,它应该等到所有字节都到达。但是 CharBuffer 属于非阻塞 IO,所以不能阻塞。
我相信这至少解释了其中一个可能的原因。
编辑:
在@Pacerier 非常有价值的评论之后,我想添加以下内容。恕我直言CharSequence,作为在不同情况下使用的非常通用的接口。该接口最著名的实现者是String,StringBuffer并将StringBuilder整个内容保存在允许直接访问任何字符的数据结构中。但是在一般情况下这是错误的。java.nio.CharBuffer就是这种情况的一个例子。
我认为这只是一个疏忽,因为indexOf操作对于任何类型的序列都是有意义的。
Java 8 可能会解决其中的一些问题。它将允许接口上的默认实现。例如
interface List {
void sort() default Collections.sort(this);
}
这允许向接口添加额外的方法,而不会给所有实现者带来实现该方法的负担。