有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何检查Java源代码中是否没有对包的引用

在Java源代码中,我不想使用一些包。例如,我不想引用swing、io或其他

是否有一个系统可以在编译时或测试时检查这一点

例如,假设注释

@NoPackage("javax.swing")
class Foo
{
    private JFrame fram; // NOT OK.
}

我为什么需要这个?因为我有一个带有swing的应用程序,我想用一个使用swing的部分对其进行重构,而另一个不使用swing,因为我想将其移植到其他ui组件(web、pda等)


共 (4) 个答案

  1. # 1 楼答案

    您可以在导入区域选择要使用的软件包

    在Eclipse中,您可以选择类来自的包

    您必须删除导入行以选择另一个包中的类

  2. # 2 楼答案

    我能想出一个相当老套的方法来做到这一点。但是,您需要有一个这样的禁止类的列表,而不仅仅是包。比如说,你想禁止使用javax.swing.JFrame

    只需创建下面的假类

    package javax.swing;
    
    class JFrame {
    }
    

    请注意,该类不是公共的,因此任何导入它的尝试都会导致编译错误“The type javax.swing.JFrame is not visible.

    你可以从所有这些被禁止的类中创建一个JAR文件,并确保类加载器最后加载它们。这确保了编译器错误肯定会发生。只要想运行这个测试,就可以简单地选择包含/排除这个JAR文件——如果使用ant,这是一个简单的任务

  3. # 3 楼答案

    我不知道有这样的工具,但创建一个工具并没有那么复杂。所有使用的类的引用都在类文件中编码。使用一些classfile library,可以检查类文件,并列出所有使用的类(或包)。如果插入了@NoPaquage之类的注释,那么工具就可以检查类是否真的没有使用这些包

  4. # 4 楼答案

    你不能让JVM过滤你正在编写的代码。但是,可以使用泛型来限制所有公共API中允许的类。您还可以这样限制继承:

    class Parent {
        public Parent() throws Exception {
            if (this instanceof Child)
                throw new Exception("It's a child");
        }
    }
    
    public class Child extends Parent {
        public Child() throws Exception {
            super();
        }
    }