我们能否防止自己实例化一个从导入库中的Java类?

3

我有一个库类,也就是从JAR文件中加载的类,其源代码不在我的控制范围内。我们在项目中的几个地方实例化它,并且应该始终设置所创建对象的一个属性。不幸的是,该库没有中央设置,因此我创建了一个子类:

public class MyClass extends LibraryClass {
    public MyClass() {
        super();
        super.setSomeProperty();
    }
}

然后我用 MyClass 替换了所有 LibraryClass 的实例。这样做效果很好,但我希望未来自己和同事们都不要再实例化 LibraryClass。

是否可以通过 Maven、Eclipse 或其他方式将 LibraryClass(或其构造函数)标记为已弃用?这将是一种编译时的解决方案。

或者是否可以使用一些 Spring / Aop 的魔法,在运行时将所有实例化的 LibraryClass 替换为 MyClass?

2个回答

1

既然您提到将构造函数标记为已弃用(实际上并不会禁止使用)- 如果您正在使用类似于Sonar的工具,您可以创建自己的规则,将除了子类之外的用法标记为错误。


谢谢,这是一个好建议,我们正在引入Jenkins,我会尝试创建这样的规则! - Géza

1
如果您在应用程序中使用Spring,并且所有bean的实例化都是通过Spring完成的,则在应用程序启动时检查是否存在类型为LibraryClass的bean。如果存在,则抛出异常。可以针对用于bean实例化的任何其他框架实现类似的解决方案。

不幸的是,我所指的类是一个GUI组件,它不会被Spring实例化,并且它不是单例模式,它将在应用程序启动后实例化。 - Géza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接