Почему HashMap сбрасывается после выхода из метода? - PullRequest
0 голосов
/ 15 апреля 2011

У меня возникли проблемы с HashMaps в моей программе. У меня есть несколько объявлений в верхнем классе, например:

  public HashMap<String, Object> hmClass = new HashMap<String ,Object>();
        public HashMap<String, Object> hmIns = new HashMap<String, Object>();
        public HashMap<String, Object> hmCon = new HashMap<String, Object>();
        public HashMap<String, Object> hmParam = new HashMap<String, Object>();
        public HashMap<String, Object> hmResult = new HashMap<String, Object>();

В отдельном методе я помещаю в них значения следующим образом:

public String newInstanceCreate(Class c3, String classInstance)//void ??
    {
        Class c = c3;
        String cI = classInstance;
        Object instance = null;
        Object con = null;
        String instanceName = null;

        try{
         instanceName = JOptionPane.showInputDialog(null, "Under what name would you like to store this Instance?", 
                                                "Create an Instance of a Class", JOptionPane.QUESTION_MESSAGE);
        }catch(NullPointerException e)
        {
            newInstanceCreate(c,cI);
        }

        hmClass.put(instanceName, c);  //add the name of the instance as key and class as value to the hashmap 
        System.out.println(hmClass);    

            con = JOptionPane.showInputDialog(null,"Choose Constructor for " + c, "Create an Instance of a Class", 3, null, getConstructors(c), JOptionPane.QUESTION_MESSAGE);


        System.out.println("worked + " + con);
        hmCon.put(instanceName, con);   //add the name of the instance as key and constructor as value to the hashmap
        System.out.println(hmCon);


        try {
            instance = c3.getDeclaredConstructor().newInstance(); //create the instance --KEY
            hmIns.put(instanceName, instance);
            System.out.println("23" + instance);
            hmParam.put(instanceName, getParams(c3, con));  //ask the user for the parameters (doubles) that they want in the instance constructor
                                                            // add the name of the instance as key and parameters(array) as value           

        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e){
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        System.out.print("hmClass: \n" + hmClass + "hmIns: \n" + hmIns + "hmCon: \n" + hmCon + "hmParam: \n" + hmParam);
        return classInstance;
    }

Но когда я пытаюсь получить к ним доступ другим способом, кажется, что все они были сброшены.

public void option4()
    {
        System.out.println("hmIns: " + hmIns);
        String stringInstance = JOptionPane.showInputDialog(null, "Which Instance would you like to stringify? " ,
                                            "Stringify an Instance of a Class", JOptionPane.QUESTION_MESSAGE);


        //get all the required info for making the instance
        /*
         * needed: name of stored instance
         *         name of correct and stored constructor 
         *         name of parameters that were created by user (doubles?)
         */
        System.out.println(stringInstance);
        if(hmIns.isEmpty())
            System.out.println("EMPTY");
        Object ins = hmIns.get(stringInstance);
        System.out.println("ins before: " + ins);
        Object cons = hmCon.get(stringInstance);
        System.out.println("cons before: " + cons);
        Object par = hmParam.get(stringInstance);
        System.out.println("par before: " + par);

        //construct an instance and run toString() here
        try {
            ins = ((Constructor)cons).newInstance(par);
            System.out.println(" ins: " + ins);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //result from toString
        /*
         * stored: name of result
         *         result itself (stored as string for now)
         */

        JOptionPane.showMessageDialog(null, "result here??--how to get result to double??", "Stringified Instance of: ", 0);

        mainWindow();
    }

В последнем из перечисленных методов я проверил, имеет ли HashMap нулевые значения, вместо того, чтобы фактически быть пустым, но он возвращает отсутствие значений вообще. Почему HashMap сбрасывается после выхода из первого метода?

Большое спасибо за понимание.

Фран

1 Ответ

4 голосов
/ 15 апреля 2011

Не сбрасывается.Я предлагаю вам взглянуть на ваш код в отладчике и проверить, смотрят ли они на один и тот же объект / карту.Я подозреваю, что у вас есть два объекта, которые содержат карты.

...