Java—防止集合框架用于分配的方法?

Java—防止集合框架用于分配的方法?,java,collections,Java,Collections,对于Java中的一个特定作业,我让我的学生实现一些ADT,并且我阻止他们使用我们之前讨论过的任何Java集合框架List、Collections、LinkedList、Stack、Deque等 有哪些好方法可以强制/检测此限制,以确保他们没有将这些接口和类用于此特定分配 是否有编译器指令/switch/setting来完全阻止java.util的使用?我的意思是,这是一个严重的障碍,但到目前为止,这项任务只能通过java.lang来完成。我希望使用迭代器,它们需要有泛型 我本打算检测导入语句,但

对于Java中的一个特定作业,我让我的学生实现一些ADT,并且我阻止他们使用我们之前讨论过的任何Java集合框架List、Collections、LinkedList、Stack、Deque等

有哪些好方法可以强制/检测此限制,以确保他们没有将这些接口和类用于此特定分配

是否有编译器指令/switch/setting来完全阻止java.util的使用?我的意思是,这是一个严重的障碍,但到目前为止,这项任务只能通过java.lang来完成。我希望使用迭代器,它们需要有泛型

我本打算检测导入语句,但反射无法从字节码中获取这些语句。一篇文章建议使用源文件来获取导入,但我不想为此加载额外的库。我是否应该编写一个脚本来扫描它们的源文件以获取java.util.x导入

我正在考虑通过反思查看他们的类文件,看看是否有任何成员在这些类型列表中。。。但是有点乱:/

由于学生人数的原因,我的大部分作业都是自动评分/单元测试的,不过对于一些作业,我会浏览所有代码,给他们额外的反馈。所以现在,我必须在这一次上这样做,只是为了抓住那些不遵守指示的人


只是想知道你们中的一些人会为此做些什么。

有很多依赖性分析器可用,但是如果您使用的是最新的JDK,jdeps是JDK的一部分,因为8可能足以满足您的需要

例如:

$ jdeps -verbose:class -p java.util ~/opt/antlrworks/antlrworks-1.5.2-complete.jar
列出对java.util.*类的依赖关系。应该很容易从一个小的shell脚本或类似的自动检查调用它

使用reflection Class.forName…(反射类)绕过检测并非不可能,但如果您的任何学生能够做到/知道如何做到这一点,他们无论如何都应该得到一个加分-


这里提供了更多信息:

有很多依赖性分析器可用,但是如果您使用的是最新的JDK,jdeps是JDK的一部分,因为8可能就足以满足您的需要

例如:

$ jdeps -verbose:class -p java.util ~/opt/antlrworks/antlrworks-1.5.2-complete.jar
列出对java.util.*类的依赖关系。应该很容易从一个小的shell脚本或类似的自动检查调用它

使用reflection Class.forName…(反射类)绕过检测并非不可能,但如果您的任何学生能够做到/知道如何做到这一点,他们无论如何都应该得到一个加分-


此处提供了更多信息:

解决方案之一是使用checkstyle,并启用“非法导入”规则


只需将您不允许的类添加到列表中,如果它们出现在代码中,构建将失败。

解决方法之一是使用checkstyle,并启用“非法导入”规则


只需将您想要禁止的类添加到列表中,如果它们出现在代码中,构建将失败。

您的学生有多狡猾?使用任何类都不需要任何导入,只需使用完全限定的类名就足够了。这是一个很好的观点,我忘记了lolYes,我的工作做得很好,对我成千上万的非常成功的毕业生和非常高的非琐碎课程的评价,我与他们共事的时间,事实上,我正在帮助我的学生在半夜在一个不和谐的服务器上打字。但正如你可能知道或不知道的那样,当你每隔几周就有数百个程序要评分时,我们聪明的老师会做一些小事情来自动化这个负担的某些方面,比如运行脚本来检查是否明显没有遵循指示等。Sawee u so Ghumpy:你的学生有多狡猾?使用任何类都不需要任何导入,只需使用完全限定的类名就足够了。这是一个很好的观点,我忘记了lolYes,我的工作做得很好,对我成千上万的非常成功的毕业生和非常高的非琐碎课程的评价,我与他们共事的时间,事实上,我正在帮助我的学生在半夜在一个不和谐的服务器上打字。但正如你可能知道或不知道的那样,当你每隔几周就有数百个程序要评分时,我们聪明的老师会做一些小事情来自动完成这个负担的某些方面,比如运行脚本来检查是否明显没有遵循指示,等等。Sawee u so Ghumpy:这很漂亮,谢谢!JDK附带了很多有用的工具。这很漂亮,谢谢!JDK附带了很多有用的工具。