¿Por qué no es el método string.indexof parte de la interfaz charshence?
-
28-10-2019 - |
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.
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.