
由于昨天微信被爆官方的 Java SDK 存在支付漏洞,于是今天官方就放出了最新的 SDK。刚好正在接支付这块,立马就 down 了最新的 SDK,maven install,然后项目引入。然后项目就报错了。。。看到里面各种奇葩的写法,让我对鹅厂的 Java 水平表示严重的怀疑。
首先,更新后多了一个 IWXPayDomain 接口,BUT,里面定义的 abstract 是什么鬼??这特么到是接口还是抽象类???真是我孤陋寡闻了,第一次见到这么神奇的写法。
package com.github.wxpay.sdk; /** * 域名管理,实现主备域名自动切换 */ public abstract interface IWXPayDomain { /** * 上报域名网络状况 * @param domain 域名。 比如:api.mch.weixin.qq.com * @param elapsedTimeMillis 耗时 * @param ex 网络请求中出现的异常。 * null 表示没有异常 * ConnectTimeoutException,表示建立网络连接异常 * UnknownHostException, 表示 dns 解析异常 */ abstract void report(final String domain, long elapsedTimeMillis, final Exception ex); /** * 获取域名 * @param config 配置 * @return 域名 */ abstract DomainInfo getDomain(final WXPayConfig config); static class DomainInfo{ public String domain; //域名 public boolean primaryDomain; //该域名是否为主域名。例如:api.mch.weixin.qq.com 为主域名 public DomainInfo(String domain, boolean primaryDomain) { this.domain = domain; this.primaryDomain = primaryDomain; } @Override public String toString() { return "DomainInfo{" + "domain='" + domain + '\'' + ", primaryDomain=" + primaryDomain + '}'; } } } 然后,接下来神奇的地方来了,原来的 WXPayConfig 接口改成了抽象类,然鹅。。。里面抽象方法的访问控制权限是 default ??额。。你让别人怎么在不同的 package 下 Override 这个抽象类???
public abstract class WXPayConfig { /** * 获取 App ID * * @return App ID */ abstract String getAppID(); /** * 获取 Mch ID * * @return Mch ID */ abstract String getMchID(); /** * 获取 API 密钥 * * @return API 密钥 */ abstract String getKey(); /** * 获取商户证书内容 * * @return 商户证书内容 */ abstract InputStream getCertStream(); } 欢迎鉴赏,SDK 下载地址: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
1 ingin 2018 年 7 月 5 日 via Android 心平气和点,你写的东西让他们看,你会被喷死的! |
3 zpxshl 2018 年 7 月 5 日 via Android abstract interface ...这怎么过 cr 的...... |
5 Mogugugugu 2018 年 7 月 6 日 via Adroid 企鹅家的 JAVA 并不是长项,很有可能是 C++ 或者某些语言的人过来临时凑个数写的。。。 |
6 doudouwu 2018 年 7 月 6 日 abstract interface 编译后就是 interface ? |