动态创建文件中包含的所有对象

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?