получать некоторые глупые синтаксические ошибки - PullRequest
0 голосов
/ 21 июня 2010

Получение синтаксической ошибки в строке:

`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 ]

6 голосов
/ 21 июня 2010

Проблема в том, что вы определяете метод execute(), а затем пытаетесь определить метод findClasses() внутри него.

Это недопустимый синтаксис Java.

Вам нужночтобы закрыть тело метода execute, прежде чем вы сможете определить другой метод.

4 голосов
/ 21 июня 2010

Вы определяете метод findClasses внутри метод execute.

3 голосов
/ 21 июня 2010

Вы пытаетесь объявить метод внутри другого метода.Переместите определение метода List<Class> findClasses(File directory) за пределы метода public void execute() и просто вызывайте его, когда вам нужно.

1 голос
/ 21 июня 2010

Похоже, вы пытаетесь определить один метод внутри другого метода.public void execute () - ваш внешний метод, и вы пытаетесь определить, что List findClasses (File directory) выбрасывает ClassNotFoundException как метод внутри этого.

Вы не можете сделать это в Java.Вместо этого вы можете вывести метод findClasses на тот же уровень, что и execute, а затем просто вызвать его изнутри вашего метода execute.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...