Vector get()方法返回每个索引的最后一个元素

时间:2015-01-30 07:54:52

标签: java

我试图通过使用get()方法返回该索引处的值来引用 profile_channels Vector。虽然它返回Vector的每个索引的最后一个值。代码在创建时打印Vector的每个元素,并且它们都按顺序正确打印,但问题仅在使用get()方法时。此代码适用于SAX XML Parser。

try {

        handler = new DefaultHandler(){
            int channel_amt = 0;

            public void startElement(String uri, String localname, String name, Attributes attributes) throws SAXException {

                if(name == "fixture"){
                    profileID++;
                    profile_name = attributes.getValue(0);
                    profile_mode = attributes.getValue(1);
                    profile_channels.clear();
                } else {

                    if(name == "channel"){

                        profile_channel.clear();
                        profile_channel.addElement(attributes.getValue(0));
                        profile_channel.addElement(attributes.getValue(1));
            //          profile_channel.addElement(Boolean.parseBoolean(attributes.getValue(2)));

                        channel_amt++;
                        if(Arrays.asList(channels).indexOf(attributes.getValue(1)) != -1){
                            profile_channel_function[Arrays.asList(channels).indexOf(attributes.getValue(1))] = channel_amt;
                        }

                    } else {
                        profile_channel.addElement(new Range(Integer.parseInt(attributes.getValue(0)), Integer.parseInt(attributes.getValue(1)), attributes.getValue(2)));
                    }

                } 

            }       
            public void endElement(String uri, String localname, String name) throws SAXException {

                if(name == "fixture"){
                    profile[profileID] = new Profile(profile_name, profile_mode, profile_channels, profile_built_in_dimmer, profile_channel_function);
                    System.out.println(profile_channels.get(2));
                } else if(name == "channel"){
                    System.out.println(profile_channel);
                    profile_channels.add(profile_channel);
                }

            }
        };
        loadProfile("test.xml");

有什么想法吗?底部的打印语句是我打印Vector的元素的地方。

1 个答案:

答案 0 :(得分:0)

它不返回Vector的最后一个元素,但它总是为任何 get()调用返回完全相同的元素。

那是因为你正在做的事情:你重新使用一个对象实例,改变它的状态并多次添加到Vector中。

每次"频道"你需要创建一个新的profile_channel实例。元素发生。