Java - Ayuda StringTokenizer y Iterator

 
Vista:
sin imagen de perfil

Ayuda StringTokenizer y Iterator

Publicado por Gonzalo (2 intervenciones) el 18/11/2014 14:53:09
A ver, la clase StringTokenizer es una clase del API bastante antigua. Hoy en día existe un interfaz más moderno, el Iteraror, cuyos métodos son hasNext() y next(), parecidos a los que tiene StringTokenizer (hasMoreElements() y nextElements().

He creado una clase (ClienteIterator) que espera un iterador para recorrerlo e imprimirlo por pantalla:

public class ClienteIterator {
public static void recorreIteracion ( Iterator i) {
while (i. hasNext ()) {
System . out . println (i. next ());
}
}
}

Lo que quiero es que el ClienteIterator pueda iterar la clase StringTokenizer, pero sin modificarla, tampoco la de ClienteIterator. Supongo que para ello es necesario crear una nueva clase intermediaria que se encargue de conectar a ClienteIterator y StringTokenizer, pero no sé como hacerlo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda StringTokenizer y Iterator

Publicado por Tom (1831 intervenciones) el 18/11/2014 16:44:41
Te estás haciendo un lío impresionante. ¿ Qué tiene que ver StringTokenizer con Iterator ? Iterator se creó para sustituir a Enumeration en el Collections Framework, y la relación entre la clase y el interface que comentas acaba ahí, en que StringTokenizer implementa Enumeration.
Precisamente para iterar, pero sin modificar, está el interface Enumerator implementado por StringTokenizer ... y además ya que los strings son objetos inmutables, no tiene sentido implementar para ellos el interface Iterator.

En tu caso, una vez que tengas claro que estás mezclando churras con merinas, sí, necesitarías hacer una clase intermedia, algo parecido a:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Churro implements Iterator<String> {
	StringTokenizer st;
	public Churro(String str) {
		st = new StringTokenizer(str);
	}
	@Override
	public boolean hasNext() {
		return st.hasMoreElements();
	}
	@Override
	public void remove() {
		throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
	}
	@Override
	public String next() {
		return st.nextToken();
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar