2009-10-07 19 views
5

Estoy usando Eclipse, y he agregado google-collect.1.0-rc2.jar como una biblioteca a la que se hace referencia. Sin embargo, de alguna manera esto sigue sin funcionar:Java: crea una instancia de HashBiMap de Google Collection

import com.google.common.collect.HashBiMap; 

public class Odp {   
    //... 

    HashBiMap<Character, Integer> charOcc = 
     HashBiMap<Character, Integer>.create();  
} 

Eclipse da los siguientes errores:

marcadores múltiples en esta línea

  • HashBiMap no se puede resolver
  • Character.Integer no puede se resuelva
  • Error de sintaxis en token ",", "."
  • espera
  • Error de sintaxis en el símbolo "", elimine este token
  • El método create() está definido para la clase Odp

¿Qué estoy haciendo mal?

Otras cosas de Google, como Joiner, funcionan bien. (Pero Joiner no es genérico.)

+0

Cuál es el mensaje de error? –

Respuesta

20

Al llamar a funciones genéricas estáticas, no pasa los parámetros de tipo:

HashBiMap<Character, Integer> charOcc = HashBiMap.create(); 

también realmente no deberías código para la clase de implementación, por lo que está mejor haciendo

Map<Character, Integer> charOcc = HashBiMap.create(); 

o

BiMap<Character, Integer> charOcc = HashBiMap.create(); 
+0

allí vamos. Gracias. –

+0

¿Puedes explicar tu punto sobre "no deberías codificar a la clase de implementación?" –

+10

Lo más probable es que al resto de su código le importe que esté utilizando un Mapa/BiMap (que son ambas interfaces), no que esté utilizando específicamente un HashBiMap frente a TreeBiMap (no estoy seguro si esto existe) o alguna otra implementación de BiMap. Al codificar en la interfaz y no en la implementación, si alguna vez quiere cambiar la implementación subyacente que usa (supongamos que decide que debe usar un TreeMap en lugar de un HashMap, porque quiere ordenar), entonces solo tiene que hacer cambios en muy pocos lugares. –

Cuestiones relacionadas