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

时间:2015-06-16 16:47:28

标签: java spring object classpath dynamically-generated

我正在开发一个程序来标记一组学生提交的算法;每个学生都会提交自己的.java文件。

我想将这些.java文件放入一个文件夹并运行我的程序。然后我的程序将实例化文件夹中的每个类并将其添加到arrayList,以便我可以在自己的代码中运行它们的代码。

无论如何我能做到这一点,还是这样的?注意:我不知道学生的确切数量。任何帮助将不胜感激。

更新:我试图实施Jegg的解决方案;但是,我的TeamMakerTester类无法识别Team1类的主要方法。这是错误:

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{}

1 个答案:

答案 0 :(得分:1)

您好我不确定这是您想要的,但我认为这是关于如何获取文件夹中的所有课程,一旦获得它们,您就可以轻松地在您的程序中运行。

首先,您不能要求您的学生使用相同的文件名,因为他们不能放入同一个文件夹。

然后你可以考虑在Spring框架中使用一个名为ClassPathScanningCandidateComponentProvider的类,它可以扫描pacakge中的类:

AppCompatActivity

如果学生在其文件中有主要方法,则调用Student Class.main(arguments);

请查看How do you find all subclasses of a given class in Java?