2017-03-23 4 views
0
public Class Test{ 


    HashMap<String, HashMap<String, String>> GlobalMap = new HashMap(); 
    private String X; 



    public static void main(String[] args){ 
     Test t1 = new Test(); 
     t1.read(someTreeObject); 
     } 


@Override 
    public Void method1(someCtx) { 
     String A = "some value"; 
     String B = "some other value"; 

     Map Map1 = new HashMap(); 
     Map1.put(A,B); 

     System.out.println("Local Map : "+Map1.entrySet); 

     GlobalMap.put(X, (HashMap<String, String>)GlobalMap.get(X).putAll(Map1)); //<<<Compile time error details with the indicator pointing at Map1 within this line: error: incompatible types: void cannot be converted to HashMap<String,String> 

     // GlobalMap.put(X, (HashMap<String, String>)GlobalMap.get(X).put(new HashMap(A,B))); //<<<<<<<<<This is another approach, when tried gives a compile time error with the indicator pointing at A within this line: error: incompatible types: String cannot be converted to int 

     System.out.println("Global Map Details : \n"+GlobalMap.entrySet()+"\n");  

    } 
    return super.SomeMethod(someCtx); 

} 

Method1 ist eine überschriebene Methode, die ursprünglich von einer abstrakten Schnittstelle verwendet werden kann. Ich weiß, dass es nichts gibt, was ich an die Hauptmethode senden möchte.Parametrisierte HashMaps: Fehler bei der Kompilierung: inkompatible Typen

Warum werden die putAll- und put-Methoden zu unterschiedlichen Fehlermeldungen führen? Was fehlt mir hier wirklich?

Ich bin neu in Programmierung und Java und versuche wirklich, erweiterte HashMaps zu erstellen. Ich habe bei der Verwendung der generischen HashMap-Konstruktionen in meiner früheren Erfahrung nichts Ähnliches gefunden.

+0

Ja, [putAll] (https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#putAll (java.util.Map)) gibt void zurück –

Antwort

0

Ihr Fehler bezieht sich auf die Tatsache, dass putAll Methode von HashMap nichts zurückgibt (void), weil es nur alle Zuordnungen von einer Karte zu einer anderen kopiert. Sehen Sie mehr here. Sie können es außerhalb extrahieren und dann die Karte mit kopierten Elementen einfügen.

((HashMap<String, String>)GlobalMap.get(X)).putAll(Map1); 
GlobalMap.put(X, (HashMap<String, String>) Map1); 
0

Die Methode HM2.putAll (HM1) kopiert alle Zuordnungen von HM1 zu HM2. Es gibt nichts zurück. Also, tun Sie dies möglicherweise, bevor Sie es übertragen möchten.

Allerdings nicht sicher, was Sie hier in Ihrem Code erreichen wollen - indem Sie ein get (X) setzen, ohne etwas in die globale Karte zu setzen, was zu nullpointer führen würde, wenn Sie putAll() darauf ausführen.

+0

Danke für das Zeigen Ich habe der Schlüsselzeichenfolge X in meiner globalMap einen Nullwert zugeordnet. Meine Idee war jedoch, jedes Mal, wenn diese Methode aufgerufen wird, in Map1 schrittweise Werte hinzuzufügen. – user8778