[英]Java - way to prevent Collections Framework use for assignment?
對於特定作業(在 Java 中),我讓我的學生實現一些 ADT,並且我阻止他們使用我們之前介紹過的任何 Java 集合框架(列表、集合、鏈表、堆棧、雙端隊列等)。 )。
有哪些好方法可以強制/檢測此限制,以確保他們沒有將這些接口和類用於此特定分配?
是否有編譯器指令/開關/設置來完全阻止使用java.util
? 我的意思是,這是一些嚴重的障礙,但對於這個任務,到目前為止它只能通過java.lang
。 我本來想使用Iterator
,他們需要有泛型。
我打算嘗試檢測import
語句,但反射無法從字節碼中獲取這些語句。 一篇文章建議在源文件上使用QDox來獲取導入,但我不想為此加載額外的庫。 我應該編寫一個腳本來掃描它們的源文件以獲取java.util.x
導入嗎?
我正在考慮用反射查看他們的類文件,看看這些類型列表中是否有任何成員......但有點亂:/
由於學生人數眾多,我的大部分作業都是自動評分/單元測試的,但對於某些作業,我會查看所有代碼以給他們額外的反饋。 所以現在,我必須在這件事上這樣做,只是為了抓住那些不聽指示的人。
只是好奇你們中的一些人會為此做些什么。
有很多可用的依賴分析器,但如果您使用的是最新的 JDK, jdeps
(JDK 8 的一部分)可能足以滿足您的需求。
例如:
$ jdeps -verbose:class -p java.util ~/opt/antlrworks/antlrworks-1.5.2-complete.jar
列出對java.util.*
類的依賴關系。 應該很容易從一個小的 shell 腳本或類似的腳本調用它以進行自動檢查。
通過使用反射( Class.forName
...)來繞過檢測並非不可能,但是如果您的任何學生管理/知道如何做到這一點,無論如何他們都應該得到加分。 ;-)
更多信息可在此處獲得: https : //wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool
對此的一種解決方案是使用 checkstyle,並打開“IllegalImport”規則。 https://checkstyle.sourceforge.io/config_imports.html#IllegalImport
只需將您想要禁止的類添加到列表中,如果它們出現在代碼中,構建就會失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.