Pregunta

No puedo ver ningún inconveniente en hacer String.indexOf parte de la interfaz CharSequence. El beneficio sería que otras clases como StringBuffer o StringBuilder también necesitarían implementar los métodos indexos.

Entonces, ¿hay alguna razón de diseño por la cual indexOf solo debería ser parte de String?

Gracias.

¿Fue útil?

Solución

No estoy seguro de cuál es la razón de esto, pero puedo dar un ejemplo de clase que implementa CharSequence. Está java.nio.CharBuffer.

Teóricamente podría implementar indexOf() llamando charAt() en bucle. Pero no funcionará como espere el usuario. No podemos distinguir entre 2 situaciones: el carácter aún no está allí y el carácter no está allí y no estará allí. En segundo caso indexOf() debe devolver -1 por contrato. En primer caso, debe esperar hasta que lleguen todos los bytes. Pero Charbuffer pertenece a IO sin bloqueo, por lo que no puede bloquear.

Creo que esto explica al menos una de las posibles razones.

EDITAR:

Siguiendo un comentario muy valioso de @Pacerier quiero agregar lo siguiente. En mi humilde opinión CharSequence como una interfaz muy genérica que se usa en diferentes circunstancias. Los implementadores más conocidos de esta interfaz son String, StringBuffer y StringBuilder que contienen todo el contenido en la estructura de datos que permite el acceso directo a cualquier carácter. Esto está mal, sin embargo, en el caso general. java.nio.CharBuffer es un ejemplo de tal caso.

Otros consejos

Creo que eso es simplemente un supervisión, como indexOf La operación tiene sentido para cualquier tipo de secuencia.

Java 8 puede resolver algunos de estos problemas. Permitirá implementaciones predeterminadas en interfaces. p.ej

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

Esto permite agregar métodos adicionales a las interfaces sin colocar una carga para todos los implementadores para implementar ese método.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top