2009-10-07 6 views
5

Ich verwende Eclipse, und ich habe google-collect.1.0-rc2.jar als eine referenzierte Bibliothek hinzugefügt. Doch irgendwie ist dies immer noch nicht funktioniert:Java: Instantiate HashBiMap der Google-Sammlung

import com.google.common.collect.HashBiMap; 

public class Odp {   
    //... 

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

Eclipse-gibt die folgenden Fehler:

Mehrere Marker an dieser Linie

  • HashBiMap nicht
  • Character.Integer nicht gelöst werden können aufgelöst werden
  • Syntaxfehler auf Token ",", "." erwartet
  • Syntaxfehler auf Token "", löschen Sie dieses Token
  • Die Methode create() ist nicht definiert für die Klasse ODP

Was mache ich falsch?

Andere Google Zeug, wie Joiner, funktioniert gut. (Aber Joiner ist nicht generisch.)

+0

Was ist die Fehlermeldung? –

Antwort

20

Wenn statische generische Funktionen aufrufen, müssen Sie nicht den Typ-Parameter übergeben:

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

auch wirklich Sie sollten keinen Code für die Umsetzung Klasse, so dass Sie tun besser

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

oder

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

da gehen wir hin. Vielen Dank. –

+0

können Sie Ihren Punkt zu "Sie sollten nicht zu der Implementierungsklasse codieren?" –

+10

Mehr als wahrscheinlich, der Rest Ihres Codes interessiert nur, dass Sie eine Karte/BiMap (die beide Schnittstellen sind) verwenden, nicht, dass Sie speziell eine HashBiMap vs TreeBiMap (nicht sicher, ob das existiert) oder eine andere BiMap-Implementierung. Wenn Sie die zugrunde liegende Implementierung, die Sie verwenden, austauschen möchten (indem Sie zum Beispiel entscheiden, dass Sie eine TreeMap anstelle einer HashMap verwenden sollten, weil Sie eine Order erstellen möchten), müssen Sie nur die Schnittstelle und nicht die Implementierung codieren Änderungen an wenigen Stellen. –

Verwandte Themen