我看不出制作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);
}
这允许向接口添加额外的方法,而不会给所有实现者带来实现该方法的负担。