【这是一猿小讲的第 43 篇原创分享】
有很多久居猿门的朋友,老问 E、T 以及 ? 等这些字母,在 Java 中都是啥意思? 这个问题,大概率都是在研究底层源码、开源项目或者撸框架,因为业务代码很少接触到这些个字母,为了给更多人在前进道路上实现披荆斩棘,推出了《 人生靠反省,Java靠泛型 》一篇分享,着重讲了讲 Java 泛型。
今天的分享也不例外,源自于一个工作近 15 年的老码农,问我的一个 Java 的问题。 当时我们一起深入以太坊 Java 版的代码(ethereumj),想基于以太坊的代码,撸一个公链出来,但是其中有很多类似如下的代码,影响了他阅读源码,就找我聊有关这样的代码究竟是咋回事?
先从以太坊 Java 版的源码中摘两段,顺道也考验一下你是否能解释清楚?
摘一 : 发现 sha3 方法在类中并没有定义,那方法究竟来自于哪里呢?
摘二 : 发现 max 方法在类中并没有定义,那方法究竟来自于哪里呢?
发现 N 多此类的方法调用,在本类中没有定义,但是细心一点会发现有 N 多 static 包的导入。
不得不说老外的代码写的真洋(骚)气。 其实这个用法是静态的 import,是 Java 5.0 的新特性,也是一把双刃剑。 有些人很喜欢这个特性,有些人则恨之入骨,为什么这么说呢? 简单写点代码,示意一下。
平时都这么写。
使用静态 import 的写法,就比较个性。
尝试官方: 如果程序中只会用到一两次,不如不用静态的 import,这样程序也比较好阅读; 如果会用到很多次,或许用 static 的 import 会让程序看起来比较清爽。
个人愚见: 若是想秀秀自己 Java 的功底,写个 demo,自己用用也就可以了,考虑到阅读性,没必要付诸生产实践。 因为静态导入,很容易产生名称冲突问题,如果你讨厌多打几个字,懒省事则用这个特性,但是随之而来的便是程序的晦涩难懂、会让程序更易混淆。
说实话,这个对于工作近 15 年的码农而言,人家开始用的 JDK 版本可谓是低的不能再低,所以不懂 Java 5.0 的静态导入的新特性,情有可原。 但是对于我们这等一入手都是高等版本 JDK 研发人员而言,其实这个问题就略显小儿科,所以当面试中再有问「Java 5.0 的新特性有哪些? 」,不妨也提提今天的经历,但是这个问题被问到的可能性,在今天已经很低了,反正我在面试别人时是不再问了 (捂嘴笑) 。
另外如果你们闲着没事,又想多提高一下,想多了解点以太坊 Java 版挖矿源码流程,那么后台回复「eth_miner」可以轻松获取流程图,仅提供给需要的朋友。
好了,简单的水文一篇,希望你能 get 到水的深度,如果感觉水还有点温度,那不妨动动手指肆意的分享转发!
原文 http://mp.weixin.qq.com/s?__biz=MzU2MDg5NzYzNA==&mid=2247484207&idx=1&sn=2196b2950f01e73e9428f96a5978e8f1