2010-03-11 6 views
14

¿Cómo se puede crear una instancia de un Bimap de Google-colecciones?para crear una instancia de BIMAP google-colecciones en Java

He leído la pregunta Java: Instantiate Google Collection's HashBiMap

Una muestra de mi código

import com.google.common.collect.BiMap; 

public class UserSettings { 

private Map<String, Integer> wordToWordID; 

UserSettings() { 

    this.wordToWordID = new BiMap<String. Integer>(); 

consigo cannot instantiate the type BiMap<String, Integer>.

Respuesta

33

Como se indica en la pregunta vinculada, se supone que debe utilizar los métodos de fábrica create().

En su caso, este significa cambiar

this.wordToWordID = new BiMap<String. Integer>(); 

a

this.wordToWordID = HashBiMap.create(); 
+0

Hmm. Tu respuesta plantea una nueva pregunta. ** ¿Por qué EnumBimap no tiene el método 'create' sin parámetros, como HashBiMap? ** –

+0

@Masi: es una buena pregunta. Creo que la razón es porque EnumBimap necesita saber cuáles son sus parámetros, y debido al borrado de tipos no puede saber a menos que le pase los objetos de 'Clase' en algún momento. Lo mismo es cierto de 'EnumMap' y' EnumSet' en la biblioteca estándar. –

+0

Por lo tanto, no es suficiente que 'EnumMap' conozca únicamente los tipos. Al parecer, hace algunos procesamientos basados ​​en el contenido de los datos de entrada. –

6

Otra manera fresca para crear un BIMAP, pero en este caso un BIMAP inmutable, está utilizando el ImmutableBiMap.Builder.

static final ImmutableBiMap<String, Integer> WORD_TO_INT = 
    new ImmutableBiMap.Builder<String, Integer>() 
     .put("one", 1) 
     .put("two", 2) 
     .put("three", 3) 
     .build(); 

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html

+0

Creo que esto es incluso mejor que la respuesta de Michael en algunos casos. Inmutable por eficiencia, sin nulos. ¿Qué piensas? Creo que esta característica apareció después de que hice la pregunta. Manual de ello aquí http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html –

+0

Regalos a los javadocs @Masi, que no se me ocurrió poner ellos aquí también. Supongo que Immutability vs. Mutability es una discusión diferente, pero como siempre uso objetos inmutables, pensé que al menos de esta manera merecía una mención. –

Cuestiones relacionadas