Java 为什么不是';接口CharSequence部分的t方法String.indexOf?

Java 为什么不是';接口CharSequence部分的t方法String.indexOf?,java,string,indexof,charsequence,Java,String,Indexof,Charsequence,我看不出制作部分界面有什么缺点。好处是其他类,如StringBuffer或StringBuilder,也需要实现indexOf方法 那么,为什么indexOf只应该是字符串的一部分,有什么设计原因吗 谢谢。我认为这只是一个疏忽,因为indexOf操作对于任何类型的序列都是有意义的。我不确定这是什么原因,但我可以给出一个实现CharSequence的类示例。它是java.nio.CharBuffer 理论上,它可以通过在循环中调用charAt()来实现indexOf()。但它不会像用户期望的那样工

我看不出制作部分界面有什么缺点。好处是其他类,如StringBuffer或StringBuilder,也需要实现indexOf方法

那么,为什么
indexOf
只应该是
字符串的一部分,有什么设计原因吗


谢谢。

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

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

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

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

编辑:

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

Java8可以解决其中一些问题。它将允许在接口上进行默认实现。e、 g

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

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

因此,您要问的是:
CharSequence
为什么没有
indexOf
方法?StringBuffer和StringBuilder确实有indexOf方法,虽然…@Thilo-哪种类型的问题是为什么CharSequence不指定这种行为?(尽管java.nio.CharBuffer和javax.swing.text.Segment没有实现
indexOf
,但它们很容易实现。)为什么StringBuilder没有
包含
?我想只有API设计师才能回答这类问题(尽管没有投票决定是否关闭,因为这可能已经在一些邮件列表中讨论过了,而且有人可能知道)。@Shakedown是的,这是我的问题,因为
indexOf
适用于当前实现
CharSequence
的每个类。例如
java.nio.CharBuffer
在AlexR的回答中提到的情况下,这将如何工作?
indexOf()
的默认实现无法解决他提到的问题。如果您在CharBuffer、StringBuilder或任何可变对象上使用方法,则其
false现在没有返回代码,但如果您更改了某些内容,则可能为true。如果您更改某些内容,例如数据、位置或限制发生更改,则该值现在可能同样为
真,但也可能为假。你只能根据现在的情况返回真/假。这是本末倒置。您只是认为CharBuffer不应该是CharSequence,而不是indexof不应该在CharSequence中。@Pacerier,谢谢您的评论。请看一看我的答案,希望它能推动马前进似乎应该(但遗憾的是)有一个单独的接口来提供String和StringBuilder都实现的indexOf()方法,这样您就可以将任何一个方法传递到一个方法中,并轻松地从中调用indexOf()。