9

我看不出制作String.indexOf界面的一部分有任何缺点CharSequence。好处是其他类,如 StringBuffer 或 StringBuilder 也需要实现 indexOf 方法。

那么是否有任何设计原因为什么indexOf应该只是其中的一部分String

谢谢你。

4

3 回答 3

8

我不确定这是什么原因,但我可以举一个实现CharSequence. 它是java.nio.CharBuffer

理论上可以通过循环indexOf()调用来实现。charAt()但它不会像用户期望的那样工作。我们无法区分两种情况:角色尚不存在,角色不存在且不会存在。在第二种情况下indexOf(),应按合同返回 -1。在第一种情况下,它应该等到所有字节都到达。但是 CharBuffer 属于非阻塞 IO,所以不能阻塞。

我相信这至少解释了其中一个可能的原因。

编辑:

在@Pacerier 非常有价值的评论之后,我想添加以下内容。恕我直言CharSequence,作为在不同情况下使用的非常通用的接口。该接口最著名的实现者是String,StringBuffer并将StringBuilder整个内容保存在允许直接访问任何字符的数据结构中。但是在一般情况下这是错误的。java.nio.CharBuffer就是这种情况的一个例子。

于 2011-12-06T07:16:39.117 回答
3

我认为这只是一个疏忽,因为indexOf操作对于任何类型的序列都是有意义的。

于 2011-12-06T07:12:11.370 回答
2

Java 8 可能会解决其中的一些问题。它将允许接口上的默认实现。例如

interface List {
    void sort() default Collections.sort(this);
}

这允许向接口添加额外的方法,而不会给所有实现者带来实现该方法的负担。

于 2011-12-06T08:14:16.007 回答