2013-09-26 3 views
1

Может ли кто-нибудь помочь мне разрешить эту безобидную идентификационную ожидаемую ошибку? Я объявляю класс Register и пытаюсь создать список объектов Register.<identifier> ожидаемая ошибка при создании списка объектов

ОБНОВЛЕНИЕ: «Регистрация» локально находится в MySaxParser.java, как предложено Meesh. Но я все еще вижу ожидаемую ошибку идентификатора. Полный код и сообщение об ошибке ниже:

проблема была замечена с использованием 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 
+2

Оба класса в одном файле? Я не думаю, что вы можете объявить их публичными. – Meesh

+0

, но ошибка должна быть не в том, что публичный класс должен быть объявлен в имени файла MySaxParser.java ??? Я не понимаю этого объяснения, пожалуйста, –

+0

Вы правы Aayush, я получаю эту ошибку, когда я ее пробовал: 'Открытый тип MySaxParser должен быть определен в собственном файле', а не' expected'. Ник вы можете предоставить больше информации? – Meesh

ответ

1

Если оба Register и MySaxParser являются общедоступными классы (что означает, что они могут использоваться другими классами), они оба должны быть в собственном файле. Если нет, вы можете сделать локальную область Register и получить доступ к ней только в MySaxParser. Например (подробности опущены для краткости):

public class MySaxParser { 
    List<Register> registers; 
} 

class Register { 
    String value; 
} 

Также см. Комментарий к @ Thilo выше. Возможно, вам придется изменить использование дженериков в зависимости от того, какой JRE/JDK вы используете.

+0

Хорошо. не могли бы вы снова проверить мое обновление? спасибо .. – Nik

+1

Аха, похоже, вы не сможете использовать дженерики, если вы не обновите время выполнения. Смотрите: http://stackoverflow.com/questions/4146197/does-java-1-4-have-generics – Meesh

+0

Я вижу .. Я запускаю его в java 1.7 env, и эта ошибка не существует. Я вижу исключение IO, которое бросает Im Im отладки – Nik

0

Это может быть ошибка компиляции. Таким образом, вам нужно написать эти два класса в одном пакете.

2
java version "1.4.1_01"  

List<Register> registerL; 

Это действительно старая версия Java. В Java5 были введены обобщения, поэтому для использования «современной» Java вам необходимо обновить до более новой версии.

+0

Спасибо, решил это с «современной» версией! Однако я вижу, что исключение IO выбрано, что я отлаживаю. Вы знаете, что может быть проблемой? Файл registers.xml находится в одном каталоге. – Nik

Смежные вопросы