欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jar包新玩法

程序员文章站 2022-03-30 16:29:39
...

想必大家都遇到过这样的一个情况
就是在引用了别人的jar包时候,调用里面的一些方法,发现,里面方法不能满足自己的需求。
这是很自然的,因为,无论哪家公司发布的功能jar包,都不能够满足所有的情况。
谁也无法预料到以后会变化出什么。

那么,我们该怎么办了?

我们拿一个工具类jar包做例子,hutool-all-xxx.jar
当我们调用它的下载文件方法时候,它的代码如下:

		public static void downloadFiles(String url,String savePath) {
			HttpUtil.downloadFile(url, savePath);
		}

我们深入到jar包源码就可以看到如下内容:

/**
	 * 下载远程文件
	 * 
	 * @param url 请求的url
	 * @param destFile 目标文件或目录,当为目录时,取URL中的文件名,取不到使用编码后的URL做为文件名
	 * @param timeout 超时,单位毫秒,-1表示默认超时
	 * @param streamProgress 进度条
	 * @return 文件大小
	 * @since 4.0.4
	 */
	public static long downloadFile(String url, File destFile, int timeout, StreamProgress streamProgress) {
		if (StrUtil.isBlank(url)) {
			throw new NullPointerException("[url] is null!");
		}
		if (null == destFile) {
			throw new NullPointerException("[destFile] is null!");
		}
		final HttpResponse response = HttpRequest.get(url).timeout(timeout).executeAsync();
		if (false == response.isOk()) {
			throw new HttpException("Server response error with status code: [{}]", response.getStatus());
		}
		return response.writeBody(destFile, streamProgress);
	}

会发现,这段代码的第18行无法传输参数和添加头部信息,所以就出现了无法满足我们需求的情况。

这个时候我们有三种处理方式(目前我知道的三种):
1.我们直接修改jar包。
修改jar包的方式很简单,但是很low,因为,万一官方临时修补了10几个bug,你这个jar包用还是不用了?
那么言归正传,如何修改jar包了?
首先,我们随便创建一个工程,在工程里创建一个package,和jar包中的package一样,然后,创建一个和jar包中一样的class,或者abstract等。把jar文件的内容粘贴过来,修改我们想修改的地方,比如这里,我们要在第18行添加头部信息和参数发送代码。添加好了后,我们clean一下自己的工程,便会编译出一个class文件,找到这个class文件,并且替换掉jar包中的该文件。
替换jar包中的class文件方法,把jar拷贝出来,用WinRAR工具查看内容,然后,找到里面的文件位置
jar包新玩法
接着把我们刚编译出来的class文件,拷贝到这个路径下,替换原文件即可。

2.采用Java的继承思想。
我们在工程中,创建自己的类,然后,继承jar包中的类,这样,我们创建的类,就可以使用jar包文件中的方法了,如果觉得方法不够用,我们就重写自己的方法,覆盖jar文件中的方法,这样,我们new出自己的子类对象时候,就可以看到所有的可用方法了。

3.copy方法。
我们直接查看jar源码,然后,把想修改的方法给copy出来,自己修改下,直接调用我们自己的方法即可。

比对之下,修改jar包的方式太麻烦,太low,太不实用了。
建议采用第二种方法,一方面体现了对Java继承思想,重写重载思想的灵活运用, 一方面又轻松解决了自己的问题。

特别声明:hutool工具jar包非常实用,建议大家都下载使用。
我这里是因为对它还不熟悉,所以,在这个downloadFile这个方面处理的不好,由此,引发我写了这篇文章。
但并不代表hutool工具jar包不够好,它非常强大。

相关标签: jar