Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中重写库方法?_Java_Android_Methods_Overriding - Fatal编程技术网

如何在Java中重写库方法?

如何在Java中重写库方法?,java,android,methods,overriding,Java,Android,Methods,Overriding,我正在做一个大型的Android项目,它正在使用。方法fromJson()在许多文件中被调用了几十次。每次调用此方法时,我都需要提供一些特殊的案例测试 我不想在每次使用这个方法时都进行重复测试,而是想遵循原则,简单地以某种方式覆盖fromJson()方法 我的第一个想法是创建一个Gson的子类并重写该方法,但是我仍然需要做几十个(也许几百个)的更改才能使其工作。但即使我愿意做这项工作,Gson也是最终的,因此无法扩展 第二个想法:修改Gson库代码是可能的。但我不想走这条路,因为我担心我可能会弄

我正在做一个大型的Android项目,它正在使用。方法
fromJson()
在许多文件中被调用了几十次。每次调用此方法时,我都需要提供一些特殊的案例测试

我不想在每次使用这个方法时都进行重复测试,而是想遵循原则,简单地以某种方式覆盖
fromJson()
方法

我的第一个想法是创建一个Gson的子类并重写该方法,但是我仍然需要做几十个(也许几百个)的更改才能使其工作。但即使我愿意做这项工作,Gson也是最终的,因此无法扩展

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


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

既然没有人回应,我就自己回答

如果库类/方法被声明为final,那么关键是永远不要继承或重写所述类。因为它是一个库(我没有访问源代码的权限),所以没有办法改变它

  • 解决方案1:编写自己的库。这当然会击败 使用图书馆的全部目的(避免重新发明 车轮)

  • 解决方案2:找到一个解决方案。这听起来很有意思,但这是 也许是最合理的选择

  • 解决方案#3:面对缺陷/错误/缺少功能。不是全部 问题是表演的障碍。你可能会有一个很棒的节目 这仍然没有达到每一个期望的细节

  • 解决方案4:放弃该项目。有时这可能是一个可行的方法 选项但现在对我来说不是


你可以使用吗?试试Mockito的Spy:-你可以重写一个方法,在那里添加一些逻辑,然后调用真正的方法。我既没有使用Aspectj也没有使用Mockito。我不愿意再为这个项目添加一个库,但我将花一个小时研究这些可能性。@ScottBiggs不确定java反射的工作方式是否与使用android SDK编译时反射的工作方式相同。但这里有一个很好的答案,表明你实际上可以“破解”这个库的最后一个字段:@CausingUnderflowsEverywhere:非常有希望。不幸的是,我对反思的了解非常有限。如果你不喜欢这个解决方案,可以自己写。如果是半途而废,我会给它一个检查。至少写一篇评论来解释否决票!