在软件开发中,我们都在使用软件提供商提供的库。考虑在 A 类中有四个函数,即 x,y,z。我只是希望我的开发团队避免使用函数 x。因此,我没有告诉他们不要使用,而是找到了一个想法。继承类并覆盖所有函数,对于函数 x 抛出一个不受支持的方法异常,其余的我调用超级方法。还有我发现一个问题,开发者可以直接使用基类A,如何避免直接使用A类。我在 OSGi 中发现了类似的功能,可以引入 lib 包然后不导出等等。有什么方法可以实现这个是java吗?
4 回答
我想出于这些原因存在代码审查。考虑无法编辑第三方源的情况,您会怎么做?就像 Siddharth 说的那样,对它进行子类化并抛出一个有意义的异常并用明确的理由记录它。如果有人在那之后仍然使用基类,那可能不是出于无知,而是出于好奇。这种事情可以个人欣赏和学习,但为了项目的缘故,开发人员必须遵循指导方针。
我认为简单地告诉您的开发人员该做什么比复杂的软件解决方案更可取。有时简单的事情会更好。
但是,如果您坚持走这条路,如果您是 Spring 用户,则可以使用方面强制执行您的架构标准。将有问题的方法与被调用时抛出异常的方面结合起来。
有多种工具可以检查源代码是否符合某些规则,例如格式化、死代码、变量命名约定等。Java 的流行工具包括Maven Enforcer 插件、checkstyle和PMD。
这些可能允许您编写禁止某些方法调用的规则。然后你可以在编译时自动检查。据我所知,不幸的是,上述工具均不支持开箱即用的“非法方法调用”;但是,至少对于 PMD 而言,编写新检查相当简单。
您可以在十六进制编辑器中编辑库类文件并将其访问修饰符从公共修改为包私有。你也可以重命名它,然后使用继承来包装这个类。在这里您可以找到类文件规范。一旦我尝试过这种技术,用提供一些额外日志记录和其他有用技巧的包装类替换 jdbc 驱动程序类。