java – 如何修改第三方代码

一个据说简单的建筑/设计问题:

我们的Java应用程序依赖于第三方代码.但是,这个第三方代码做了一件我不喜欢的事情(设置timeZone到GMT;我想根据应用程序的TimeZoneID设置不同的时区).我有什么选择?

1-我不能简单地扩展第三方类并覆盖不受欢迎的行为,因为在我们的应用程序中随处可见第三方类的调用者(这是我们继承应用程序的方式).

2-也许过于侵入性的解决方案是编写我们自己的第三方代码,并依赖于它.但是,这可能是太多太过侵入性的.

3-我看了一下Spring AOP(和aspectJ)的东西来做加载时间编织.我并没有太多深入,但在我看来,因为第三方代码调用了java.util.Timezone.setDefault(GMTTimeZone); (而不是调用我们自己编写/管理的类)这不容易做到.我可能在这里错了,也许我仍然可以编织java.util.Timezone.setDefault().如果这是真的,请告诉我,这几乎是我的(唯一)解决方案.

4-我错过了什么,或者几乎所有可用的选项?

最佳答案 首先,您可以联系第三方并要求他们更改代码.这不像你想象的那么长.它会让你烦恼,也可能是他们的其他顾客.

此外,您只能将子类用作代码的代理.您项目中的其他人不一定必须使用您的子类.您可以清除不需要的行为并从代码中抽象出更改.您可以在要求他们更改行为时将此代码发送给供应商!

最后,最简单的解决方案是获取返回值并将其固定在线.这是现在完成它的最快方法,但它不是一个好的模式,因为你引入的代码只用于解决其他人的问题.

点赞