动态创建文件中包含的所有对象
Dynamically create all objects contained in file
我正在开发一个程序来标记一组学生提交的算法;每个学生将提交自己的 .java 文件。
我想将这些 .java 文件放入一个文件夹和 运行 我的程序中。然后我的程序将实例化文件夹中的每个 class 并将其添加到 arrayList 以便我可以 运行 他们的代码在我自己的。
我有没有办法做到这一点,或者类似的事情?注:我不知道具体的学生人数。任何帮助将不胜感激。
更新:我已经尝试实施 Jegg 的解决方案;但是,我的 TeamMakerTester class 无法识别我的 Team1 class 的主要方法。这是错误:
error: cannot find symbol
cls.main();
^
symbol: method main()
location: variable cls of type Class
1 error
任何帮助将不胜感激,这是代码,其中 Team1 是学生提交的代码:
public class TeamMakerTester{
public static void main(String[] args){
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
provider.addIncludeFilter(new AssignableTypeFilter(Team.class));
// scan in org.example.package
Set<BeanDefinition> components = provider.findCandidateComponents("org/mysteryhobo/algorithms");
for (BeanDefinition component : components)
{
try{
Class cls = Class.forName(component.getBeanClassName());
cls.main();
} catch (ClassNotFoundException cnfe){
System.out.println("Error: Class not found");
}
}
}
public class Team1 extends Team{
private String teamName = "Team1";
private String move; // try removing
public String getTeamName(){
return teamName;
}
public static void main(String[] args){
Team1 algo = new Team1();
algo.runGame();
}...
public class Team{}
您好,我不确定这是否是您想要的,但我认为这是关于如何在文件夹中获取所有 classes,一旦获取它们,您就可以轻松地 运行 在您的文件夹中程序。
首先,你不能要求你的学生使用相同的文件名,因为他们不能放在同一个文件夹中。
然后您可以考虑在 spring 框架中使用 class 名为 ClassPathScanningCandidateComponentProvider 的框架,它可以扫描包中的 classes:
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
provider.addIncludeFilter(new AssignableTypeFilter(MyClass.class));
// scan in org.example.package
Set<BeanDefinition> components = provider.findCandidateComponents("org/example/package");
for (BeanDefinition component : components)
{
Class cls = Class.forName(component.getBeanClassName());
// use class cls found
}
如果学生在他们的文件中有 main 方法,那么您调用 Student Class.main(arguments);
看看How do you find all subclasses of a given class in Java?
我正在开发一个程序来标记一组学生提交的算法;每个学生将提交自己的 .java 文件。
我想将这些 .java 文件放入一个文件夹和 运行 我的程序中。然后我的程序将实例化文件夹中的每个 class 并将其添加到 arrayList 以便我可以 运行 他们的代码在我自己的。
我有没有办法做到这一点,或者类似的事情?注:我不知道具体的学生人数。任何帮助将不胜感激。
更新:我已经尝试实施 Jegg 的解决方案;但是,我的 TeamMakerTester class 无法识别我的 Team1 class 的主要方法。这是错误:
error: cannot find symbol
cls.main();
^
symbol: method main()
location: variable cls of type Class
1 error
任何帮助将不胜感激,这是代码,其中 Team1 是学生提交的代码:
public class TeamMakerTester{
public static void main(String[] args){
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
provider.addIncludeFilter(new AssignableTypeFilter(Team.class));
// scan in org.example.package
Set<BeanDefinition> components = provider.findCandidateComponents("org/mysteryhobo/algorithms");
for (BeanDefinition component : components)
{
try{
Class cls = Class.forName(component.getBeanClassName());
cls.main();
} catch (ClassNotFoundException cnfe){
System.out.println("Error: Class not found");
}
}
}
public class Team1 extends Team{
private String teamName = "Team1";
private String move; // try removing
public String getTeamName(){
return teamName;
}
public static void main(String[] args){
Team1 algo = new Team1();
algo.runGame();
}...
public class Team{}
您好,我不确定这是否是您想要的,但我认为这是关于如何在文件夹中获取所有 classes,一旦获取它们,您就可以轻松地 运行 在您的文件夹中程序。
首先,你不能要求你的学生使用相同的文件名,因为他们不能放在同一个文件夹中。
然后您可以考虑在 spring 框架中使用 class 名为 ClassPathScanningCandidateComponentProvider 的框架,它可以扫描包中的 classes:
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
provider.addIncludeFilter(new AssignableTypeFilter(MyClass.class));
// scan in org.example.package
Set<BeanDefinition> components = provider.findCandidateComponents("org/example/package");
for (BeanDefinition component : components)
{
Class cls = Class.forName(component.getBeanClassName());
// use class cls found
}
如果学生在他们的文件中有 main 方法,那么您调用 Student Class.main(arguments);
看看How do you find all subclasses of a given class in Java?