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