tutorial interfaz gui grafica espaƱol ejemplos consultas componentes clase java set hashtable

java - interfaz - No se puede crear una instancia del tipo Set



interfaz grafica java swing pdf (3)

Estoy tratando de crear un conjunto de cadenas que se llena con las claves de un Hashtable para que un bucle for-each pueda recorrer el conjunto y poner los valores predeterminados en un Hashtable. Todavía estoy aprendiendo Java, pero la forma en que lo intento no es sintaxis válida. ¿Podría alguien, por favor, demostrar la forma correcta de hacerlo y explicar por qué mi manera no funciona y la suya sí?

private Hashtable<String, String> defaultConfig() { Hashtable<String, String> tbl = new Hashtable<String, String>(); tbl.put("nginx-servers","/etc/nginx/servers"); tbl.put("fpm-servers","/etc/fpm/"); tbl.put("fpm-portavail","9001"); tbl.put("webalizer-script","/usr/local/bin/webalizer.sh"); tbl.put("sys-useradd","/sbin/useradd"); tbl.put("sys-nginx","/usr/sbin/nginx"); tbl.put("sys-fpmrc","/etc/rc.d/php_fpm"); tbl.put("www-sites","/var/www/sites/"); tbl.put("www-group","www"); return tbl; } //This sets missing configuration options to their defaults. private void fixMissing(Hashtable<String, String> tbl) { Hashtable<String, String> defaults = new Hashtable<String, String>(defaultConfig()); //The part in error is below... Set<String> keys = new Set<String>(defaults.keySet()); for (String k : keys) { if (!tbl.containsKey(k)) { tbl.put(k, defaults.get(k)); } } }


El método keySet() HashMap ya crea el conjunto que necesitas, así que simplemente:

Set<String> keys = defaults.keySet();

Esta es una vista de las claves en los valores predeterminados, por lo que su contenido cambiará cuando se realicen cambios en el mapa subyacente ( defaults ). Los cambios realizados en las keys también se reflejarán en el mapa, pero solo puede eliminar ... no agregar ... claves del mapa.

Si necesita una copia de las claves que no interactúan con el mapa original, use uno de los tipos sugeridos, como en:

Set<String> keys = new HashSet( defaults.keySet() );


Set es una interfaz. No puede crear una instancia de una interfaz, solo las clases que implementan esa interfaz.

La interfaz especifica el comportamiento, y ese comportamiento puede implementarse de diferentes maneras por diferentes tipos. Si lo piensas así, no tiene sentido instanciar una interfaz porque especifica qué debe hacer una cosa, no cómo lo hace.


Set no es una clase, es una interfaz.

Básicamente, solo puede instanciar la clase implementando Set ( HashSet , LinkedHashSet o TreeSet )

Por ejemplo :

Set<String> mySet = new HashSet<String>();