为什么没有方法String.indexOf接口CharSequence的一部分?

时间:2011-12-06 06:33:46

标签: java string indexof charsequence

我无法看到String.indexOf部分接口CharSequence的任何缺点。好处是其他类如StringBuffer或StringBuilder也需要实现indexOf方法。

为什么indexOf应该只是String的一部分有任何设计理由?

谢谢。

3 个答案:

答案 0 :(得分:8)

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

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

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

编辑:

在@Pacerier发表非常有价值的评论后,我想添加以下内容。 恕我直言CharSequence作为一个非常通用的接口,用于不同的情况。此接口最知名的实现者是StringStringBufferStringBuilder,它们将整个内容保存在允许直接访问任何字符的数据结构中。然而,这在一般情况下是错误的。 java.nio.CharBuffer就是这种情况的一个例子。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

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

这允许将其他方法添加到接口,而不会给所有实现者带来实施该方法的负担。