如何检查Java源代码中是否没有对包的引用
在Java源代码中,我不想使用一些包。例如,我不想引用swing、io或其他
是否有一个系统可以在编译时或测试时检查这一点
例如,假设注释
@NoPackage("javax.swing")
class Foo
{
private JFrame fram; // NOT OK.
}
我为什么需要这个?因为我有一个带有swing的应用程序,我想用一个使用swing的部分对其进行重构,而另一个不使用swing,因为我想将其移植到其他ui组件(web、pda等)
# 1 楼答案
您可以在导入区域选择要使用的软件包
在Eclipse中,您可以选择类来自的包
您必须删除导入行以选择另一个包中的类
# 2 楼答案
我能想出一个相当老套的方法来做到这一点。但是,您需要有一个这样的禁止类的列表,而不仅仅是包。比如说,你想禁止使用
javax.swing.JFrame
只需创建下面的假类
请注意,该类不是公共的,因此任何导入它的尝试都会导致编译错误“
The type javax.swing.JFrame is not visible.
”你可以从所有这些被禁止的类中创建一个JAR文件,并确保类加载器最后加载它们。这确保了编译器错误肯定会发生。只要想运行这个测试,就可以简单地选择包含/排除这个JAR文件——如果使用ant,这是一个简单的任务
# 3 楼答案
我不知道有这样的工具,但创建一个工具并没有那么复杂。所有使用的类的引用都在类文件中编码。使用一些classfile library,可以检查类文件,并列出所有使用的类(或包)。如果插入了@NoPaquage之类的注释,那么工具就可以检查类是否真的没有使用这些包
# 4 楼答案
你不能让JVM过滤你正在编写的代码。但是,可以使用泛型来限制所有公共API中允许的类。您还可以这样限制继承: