错误:找不到Parser的符号

时间:2016-11-20 04:23:35

标签: java class parsing object compiler-errors

所以我有一个类似于

的类解析器
public class Parser implements Serializable {

     //parse Programfile with name=filename
     public Program parseProgramFile(String filename){
         /*method defined*/
         return Program
     }

在我的主要部分,我正在调用解析器通过另一个类构造函数传递它的返回值

public static void main(String[] args) {
      Manager manager = new Manager();
      String datafile = System.getProperty("import");
      if (datafile != null) {
        try {
    //Import file into Manager through Parser instance
    manager(parseProgramFile(datafile));

这就是我一直弄错的地方

error: cannot find symbol
manager(parseProgramFile(datafile));
        ^

我真的不确定我在这里做错了什么。它是解析器出错的实例吗?我目前正在管理器构造函数中创建一个解析器对象。

2 个答案:

答案 0 :(得分:2)

在Java中,静态方法(如main())可以直接访问/调用其他静态成员,从静态方法访问非静态方法,你需要一个类的对象(它包含非静态方法)。

因此,您需要创建类Parser的对象并调用方法parseProgramFile(选项1),或者您可以将parseProgramFile方法更改为static(选项) 2)。

选项(1):为Parser创建对象并从main()

进行调用
Parser parser = new Parser();
parser.parseProgramFile(parser.datafile);

选项(2):将parseProgramFile方法设为static

public static Program parseProgramFile(String filename){
         /*method defined*/
         return Program
     }

然后在您的main()中,您可以直接调用manager(parseProgramFile(datafile));

有关静态的更多信息,请参阅here

答案 1 :(得分:0)

  

我完全不明白你的意思。我假设Parser Objectparameter

Manager Constructor

然后另一种解决方案是:

public static void main(String[] args) {
   Manager manager = null;
   String datafile = System.getProperty("import");
   if (datafile != null) {
     try {
         manager = new Manager(new Parser().parseProgramFile(datafile));
     ...