java string charsequence

java - Elegir entre CharSequence y String para una API



string java 8 (1)

Según javadoc de CharSequence

Esta interfaz no refina los contratos generales de los métodos equals y hashCode. El resultado de comparar dos objetos que implementan CharSequence es, en general, indefinido. Cada objeto puede ser implementado por una clase diferente, y no hay garantía de que cada clase sea capaz de probar la igualdad de sus instancias con las de la otra. Por lo tanto, no es apropiado usar instancias arbitrarias de CharSequence como elementos en un conjunto o como claves en un mapa.

Por lo tanto, IMO debemos pensar dos veces antes de usar CharSequnce como un reemplazo para String.

Esta pregunta ya tiene una respuesta aquí:

Una String es una CharSequence . Muchos métodos en la biblioteca de Java aceptan CharSequence para que operen de manera más general . Algunos classe tienen un método String (por ejemplo, Writer.write(String) ) y también implementan Appendable con un método equivalente de CharSequence (por ejemplo, Writer.append(CharSequence) ).

Si estoy escribiendo una clase que delega en una clase de este tipo y necesita algún ingreso de texto, puedo elegir que esa entrada sea una String o una CharSequence . Elegir lo siguiente hace que la clase sea más flexible, al darle al cliente más opciones. Pero no veo mucho código que lo haga: los argumentos de texto son casi invariablemente una String lugar de una CharSequence . ¿Hay algún CharSequence usar CharSequence ? ¿Hay un éxito de rendimiento? ¿O es solo la intertia del programador o la ignorancia que causa el uso de String lugar de CharSequence ?

Comparar

class XMLWriter { private final Writer writer; // more stuff here public void writeComment(String text) { writer.write("<!-- "); writer.write(text); writer.write(" -->"); } }

con

class XMLWriter { private final Writer writer; // more stuff here public void writeComment(CharSequence text) { writer.write("<!-- "); writer.append(text); writer.write(" -->"); } }