Java - me da error al meter valor en hastable en una interface

 
Vista:
sin imagen de perfil
Val: 46
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

me da error al meter valor en hastable en una interface

Publicado por jose luis (22 intervenciones) el 18/10/2020 20:40:22
hola, intento crear un hashtable dentro de una interface, pero me da un error de compilacion en la linea donde meto el valor dentro del hashtable.
este es el codigo:
1
2
3
4
5
6
7
8
9
10
package es.java.aula.mentor.util;
 
import java.util.Hashtable;
 
public interface codigos {
 
Hashtable codigos = new Hashtable();
codigos.put("España", "123");
 
}
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

me da error al meter valor en hastable en una interface

Publicado por Kabuto (1381 intervenciones) el 18/10/2020 21:59:41
Una interfaz, no es un programa propiamente dicho.

Puedes declarar el objeto como atributo, pero no puedes trabajar con él, invocar sus métodos, etc..
Será la clase que implemente la interfaz quien pueda trabajar con este atributo.

Una interfaz es como una plantilla, sirve para indicar que atributos y métodos ha de tener una clase. Pero no para determinar como será el código de esos métodos.

Supongo que lo que quieres es una interfaz que al ser implementada por una clase, ya disponga de toda una serie de códigos preestablecidos.

Puesto que, al menos hasta donde llegan mis conocimientos, no puedes hacerlo dentro de la interfaz..., si puedes dar un rodeo y crear una clase que herede de Hashtable, para crear tu propia tabla y ponerle los datos que quieras:
1
2
3
4
5
6
7
8
9
10
import java.util.Hashtable;
 
public class TablaCodigos extends Hashtable<String, String>{
 
	public TablaCodigos() {
		put("123", "España");
		put("124", "Francia");
	}
 
}

Luego la interfaz, simplemente declara un atributo de esta clase:
1
2
3
4
5
public interface Codigos {
 
	TablaCodigos codigos = new TablaCodigos();
 
}

Y si hacemos una clase de prueba que implemente esta interfaz, veremos que recibe el atributo codigos y puede trabajar con él:
1
2
3
4
5
6
7
8
9
public class Prueba implements Codigos{
 
	public static void main(String[] args) {
 
		System.out.println(codigos.get("123"));
		System.out.println(codigos.get("124"));
	}
 
}
Eso en pantalla, hará que se muestren los nombres de los países:
1
2
España
Francia

Visto esto, si solo tenemos interés en esa única tabla de códigos, la verdad no necesitamos la interfaz.
Habiendo creado ya nuestra propia clase HashTable, directamente la podemos declarar como atributo de la clase que queramos que la use sin tener que escribir ni implementar ninguna interfaz:
1
2
3
4
5
6
7
8
9
10
11
public class Prueba {
 
	private static TablaCodigos codigos = new TablaCodigos();
 
	public static void main(String[] args) {
 
		System.out.println(codigos.get("123"));
		System.out.println(codigos.get("124"));
	}
 
}

Esto puede hacer pensar que las interfaces son innecesarias o poco útiles. Pero no es así.

En este caso sí, porque solo estamos interesados en una tabla.

Pero imaginemos que queremos disponer de varias tablas. Y que además queremos asegurarnos de que la clase que vaya a usar esas tablas, va a tener OBLIGATORIAMENTE unos métodos muy concretos.
Entonces sí cobra sentido usar una interfaz.

Vamos a renombrar nuestra tabla de paises:
1
2
3
4
5
6
7
8
9
10
import java.util.Hashtable;
 
public class TablaCodigosPaises extends Hashtable<String, String>{
 
	public TablaCodigosPaises() {
		put("123", "España");
		put("124", "Francia");
	}
 
}

Y vamos a crear otra parecida, pero de ciudades:
1
2
3
4
5
6
7
8
9
10
import java.util.Hashtable;
 
public class TablaCodigosCiudades extends Hashtable<String, String>{
 
	public TablaCodigosCiudades() {
		put("001", "Madrid");
		put("002", "Barcelona");
	}
 
}

Y ahora en la interface, declaramos esas dos tablas como atributos, y además declaramos dos métodos que se encargarán de buscar paises y ciudades.
¡¡Ojo!!, solo la declaración. La definición, es decir, el código de los métodos, se escribirá en la clase que implemente esta interfaz.

1
2
3
4
5
6
7
8
9
public interface Codigos {
 
	TablaCodigosPaises paises = new TablaCodigosPaises();
	TablaCodigosCiudades ciudades = new TablaCodigosCiudades();
 
	public String buscarPais(String codigoPais);
	public String buscarCiudad(String codigoCiudad);
 
}

Bien, ahora cuando a una clase le digamos que implemente esa interfaz, verás que el compilador lanzará un aviso de que dicha clase está obligada a incorporar los métodos declarados en la interfaz.
Si el programador no quiere ponerle código real, eso ya es cosa suya... pero ha de incluirlos.
Si son métodos void, las llaves se pueden dejar vacías.
Si son métodos que retornan algún valor, hay que ponerles aunque solo sea que retornen valor nulo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Prueba implements Codigos{
 
 
	public static void main(String[] args) {
 
 
	}
 
	@Override
	public String buscarPais(String codigoPais) {
 
		return null;
	}
 
	@Override
	public String buscarCiudad(String codigoCiudad) {
 
		return null;
	}
 
}

Pero vamos, un mínimo de código si le vamos a poner, para poder probarlos...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Prueba implements Codigos {
 
	public static void main(String[] args) {
 
		Prueba prueba = new Prueba();
 
		System.out.println(prueba.buscarPais("123"));
 
		System.out.println(prueba.buscarCiudad("002"));
 
	}
 
	@Override
	public String buscarPais(String codigoPais) {
 
		return paises.get(codigoPais);
	}
 
	@Override
	public String buscarCiudad(String codigoCiudad) {
 
		return ciudades.get(codigoCiudad);
	}
 
}


No se si con este ejemplo queda claro cuándo y por qué debemos recurrir a una interfaz.
Cualquier duda, pregunta...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

me da error al meter valor en hastable en una interface

Publicado por jose luis (22 intervenciones) el 18/10/2020 22:14:04
pues me queda todo claro. Muchas gracias por la amplia explicacion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar