为什么java.lang.CharSequence被设计为接口?

Sid*_*rth 2 java

为什么来自Java API的CharSequence是一个接口?这个界面有什么意义?

Bal*_*usC 8

它只是从任何现有的实现重构.其中一个好处是,只要您实际上只需要其中一种方法,就可以"扩展"输入.

所以不是例如

public void printEveryChar(String string) {
    for (int i = 0; i < string.length(); i++) {
        System.out.println(string.charAt(i));
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以有

public void printEveryChar(CharSequence charSequence) {
    for (int i = 0; i < charSequence.length(); i++) {
        System.out.println(charSequence.charAt(i));
    }
}
Run Code Online (Sandbox Code Playgroud)

这样就可以通过String,CharBuffer,StringBuilder,StringBufferCharSequence的实现.

然而这个事实与它没有关系java.util.Regex,只有它的好处=)

  • 这个抽象真正有意义的另一个地方是你在I/O中使用CharSequence的可变实现,即将StringBuilder传递给StringWriter而不必先创建一个String. (2认同)