簡體   English   中英

Java - 防止集合框架用於分配的方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM