在行处获得语法错误:
`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();
}
}
}
}
}
答案 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方法中调用它。