如何在 Java 中重写库方法?

问题描述 投票:0回答:1

我正在开发一个使用 Gson 的大型 Android 项目。方法

fromJson()
在许多文件中被调用了数十次。每次调用此方法时,我都需要提供一些特殊情况的测试。

我不想每次使用此方法时都经历并重复测试,而是想遵循 DRY 原则并以某种方式简单地覆盖

fromJson()
方法。

我的第一个想法是创建一个 Gson 的子类并重写该方法,但我仍然需要进行数十(也许数百)的更改才能完成这项工作。但即使我愿意做这项工作,Gson 也是

final
,因此无法扩展。

第二个想法:也许可以更改 Gson 库代码。但我不想走这条路,因为我担心我可能会破坏一些本来可以完美工作的东西。

这是我以前从未涉足过的 Java 领域。大家有什么建议吗?

java android methods overriding
1个回答
3
投票

既然没有人回复,我就继续给出我自己的答案。

如果声明了库类/方法

final
,重点是永远不要继承或覆盖所述类。由于它是一个库(而且我无权访问源代码),因此无法更改它。

  • 解决方案#1:编写我自己的库。这当然击败了 使用库的全部目的(为了避免重新发明 轮子)。

  • 解决方案#2:找到解决方法。虽然这听起来很黑客,但这就是 可能是最合理的选择。

  • 解决方案#3:接受 bug/错误/功能缺失。不是全部 问题是引人注目的。你也许能有一个很棒的程序 但这仍然没有达到每一个期望的细节。

  • 解决方案#4:放弃该项目。有时这可能是一种可行的方法 选项。但现在不适合我。

更新(2024 年 4 月 4 日)

这实际上就是我们所做的(几个月后)。我们将 Gson 库封装在我们自己的类中,我们称之为 MyGson。这个类里面有一个 Gson 对象。它用于执行实际的 Gson 调用。这允许我们在常规 Gson 调用之前和之后做一些特殊的事情。

这是一些伪代码:

public class MyGson {
  private Gson gson = new Gson();
  
  public void fromJson() {
    
    // do my necessary stuff
    
    return gson.fromJson()
  }
}

唯一需要注意的是,您需要确保只有这个类才能访问 Gson 库。只要你坚持这种做法,你就可以用库及其私有方法做各种各样的事情。

© www.soinside.com 2019 - 2024. All rights reserved.