<identifier>创建对象列表时的预期错误</identifier>

时间:2013-09-26 04:48:09

标签: java debugging compiler-errors

有人可以帮我解决这个无害的标识符预期错误吗?我正在声明一个Register类并尝试列出Register对象。

更新:正如Meesh建议的那样,'注册'在MySaxParser.java中是本地范围的。但我仍然看到标识符预期错误。完整的代码和错误消息如下:

使用java版“1.4.1_01”

看到了这个问题
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;


import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;



public class MySaxParser extends DefaultHandler {
    List<Register> registerL;
    String xmlFileName;
    String tmpValue;
    Register registerTmp;

    public MySaxParser(String xmlFileName) {
        this.xmlFileName = xmlFileName;
        registerL = new ArrayList<Register>();
        parseDocument();
        printDatas();
    }
    private void parseDocument() {
        // parse
        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            SAXParser parser = factory.newSAXParser();
            parser.parse(xmlFileName, this);
        } catch (ParserConfigurationException e) {
            System.out.println("ParserConfig error");
        } catch (SAXException e) {
            System.out.println("SAXException : xml not well formed");
        } catch (IOException e) {
            System.out.println("IO error");
        }
    }
    private void printDatas() {
       // System.out.println(bookL.size());
        for (Register tmpReg : registerL) {
            System.out.println(tmpReg.toString());
        }
    }
    @Override
    public void startElement(String s, String s1, String elementName, Attributes attributes) throws SAXException {
        // if current element is book , create new book
        // clear tmpValue on start of element

        if (elementName.equalsIgnoreCase("reg")) {
            registerTmp = new Register();
            registerTmp.setregName(attributes.getValue("regname"));
            registerTmp.setaddr(attributes.getValue("addr"));
        }
    }

    @Override
    public void characters(char[] ac, int i, int j) throws SAXException {
        tmpValue = new String(ac, i, j);
    }
    public static void main(String[] args) {
        new MySaxParser("register.xml");
    }
}



/*****
 * Model class for Regsiter
 * ****/
 class Register { 
   String regName;
   String addr;

   //Setters 
   public void setregName(String regName ) {     this.regName = regName; } 
   public void setaddr (String addr ) {     this.addr = addr; } 

   //Getters
    public String getregName() {    return this.regName; } 
    public String getaddr() { return this.addr;}

}

错误:

MySaxParser.java:19: <identifier> expected
    List<Register> registerL;
        ^
MySaxParser.java:26: '(' or '[' expected
        registerL = new ArrayList<Register>();
                                 ^
MySaxParser.java:46: ';' expected
        for (Register tmpReg : registerL) {
                             ^
MySaxParser.java:49: illegal start of expression
    }
    ^
MySaxParser.java:48: ';' expected
        }
         ^
MySaxParser.java:50: illegal character: \64
    @Override
    ^
MySaxParser.java:62: illegal character: \64
    @Override
    ^
MySaxParser.java:68: <identifier> expected
    }
     ^
MySaxParser.java:26: cannot resolve symbol
symbol  : variable registerL 
location: class MySaxParser
        registerL = new ArrayList<Register>();
        ^
9 errors

3 个答案:

答案 0 :(得分:2)

java version "1.4.1_01"    

List<Register> registerL;

这是一个非常古老的Java版本。 Java5中引入了泛型,因此为了使用“现代”Java,您需要更新到更新的版本。

答案 1 :(得分:1)

如果RegisterMySaxParser都是公共类(意味着它们可以被其他类使用),则它们都需要位于自己的文件中。如果没有,您可以在本地作用域Register,并仅在MySaxParser中访问它。例如(为简洁起见省略细节):

public class MySaxParser {
    List<Register> registers;
}

class Register {
    String value;
}

另外,请参阅@ Thilo上面的评论。您可能需要根据您使用的JRE / JDK更改泛型的使用。

答案 2 :(得分:0)

可能是编译错误。所以,你需要在同一个包中编写这两个类。

相关问题