2009-10-07 13 views
5

Sto utilizzando Eclipse e ho aggiunto google-collect.1.0-rc2.jar come libreria di riferimento. Eppure in qualche modo questo continua a non funzionare:Java: Instantedia HashBiMap di Google Collection

import com.google.common.collect.HashBiMap; 

public class Odp {   
    //... 

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

Eclipse fornisce i seguenti errori:

marcatori multipli in questa linea

  • HashBiMap non può essere risolto
  • Character.Integer non può essere risolto
  • Errore di sintassi sul token ",", "." atteso
  • Errore di sintassi su pegno "", eliminare questo token
  • Il metodo Create() non è definito per la classe Odp

Che cosa sto facendo di sbagliato?

Altre cose di Google, come Joiner, funzionano bene. (Ma Joiner non è generico.)

+0

Qual è il messaggio di errore? –

risposta

20

Quando si chiama funzioni generiche statiche, non si passa i parametri di tipo:

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

anche in realtà non si dovrebbe codice alla classe di implementazione, così sei meglio fare

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

o

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

ci siamo. Grazie. –

+0

puoi spiegare il tuo punto su "non dovresti scrivere codice per la classe di implementazione?" –

+10

Più che probabile, al resto del codice interessa solo che stai usando Map/BiMap (che sono entrambe le interfacce), non che tu stia usando in modo specifico un HashBiMap vs TreeBiMap (non sono sicuro se questo esiste) o qualche altra implementazione BiMap. Codificando l'interfaccia e non l'implementazione, se mai si desidera sostituire l'implementazione sottostante che si utilizza (diciamo che si decide di utilizzare una MapMap invece di una HashMap, perché si desidera ordinare), quindi è sufficiente effettuare cambia in pochissimi posti. –

Problemi correlati