得到一些愚蠢的语法错误

时间:2010-06-21 18:51:58

标签: java ant

在行处获得语法错误:

`List<Class> findClasses(File directory)` throws `ClassNotFoundException`...

无法弄清楚原因。这是我的代码。

import org.apache.tools.ant.Task;
import java.util.*;
import java.io.*;

public class CreateTestPackage extends Task
{
 String allTestsFile = getProject().getProperty("alltestfiles")+ getProject().getProperty("testfile");
 public void execute()
 {
  List<Class> findClasses(File directory) throws ClassNotFoundException
  {

   List<Class> classes = new ArrayList<Class>();
   if (!directory.exists())
   {
    return classes;
   }
   File[] files = directory.listFiles(new FilenameFilter()
   {
    public boolean accept( File dir, String name )
    {
     return name.matches("test.*\\.class");
    }
   });
   for (File file : files)
   {
    if (file.isDirectory())
    {
     assert !file.getName().contains(".");
     classes.addAll(findClasses(file));
    }
    else if (file.getName().endsWith(".class"))
    {
     classes.add(Class.forName(file.getName().substring(0, file.getName().length() - 6)));
    }
   }
   return classes;
  }
  for(Class c : classes)
  {
     string packageName=c.getPackage().getName();
        BufferedWriter out =null;
        try
        {
           out = new BufferedWriter(new FileWriter(testfile));
           out.write(packageName+"\n");         
        }
        catch (IOException e)
        {
          e.printStackTrace();
       }
        finally
        {
          if (out!=null)
           try
           {
              out.close();
           }
           catch (IOException e)
           {
              e.printStackTrace();
           }
       }
  }

 }
}

4 个答案:

答案 0 :(得分:6)

问题是您定义了execute()方法,然后尝试在其中定义findClasses()方法。

这不是合法的Java语法。

在定义另一种方法之前,您需要关闭execute的方法体。

答案 1 :(得分:4)

您在方法findClasses中定义方法execute

答案 2 :(得分:3)

您正在尝试在另一个方法中声明一个方法。将List<Class> findClasses(File directory)方法的定义移到public void execute()方法之外,只需在需要时调用它。

答案 3 :(得分:1)

看起来你正试图在另一个方法中定义一个方法。 public void execute()是你的外部方法,你试图定义List findClasses(File目录)抛出ClassNotFoundException作为其中的方法。

你不能用Java做到这一点。你可以做的是将findClasses方法拉出到与execute相同的级别,然后从execute方法中调用它。