前言
java一门优秀的软件工程语言。但是随的时代的发展,一些功能需要,一些被人吹嘘上天而毫无意义的特性,被迫实现。这些特性有些被吹嘘以为可以拯救世界,而被一些不了解的在不正确的地方,不正确的人的使用,造成很多问题。接下来由鸟菜啊深入解读这些特性,帮助大家正确的使用
不应该在用的特性
- lambda表达式与函数式接口
- 流计算API
- 类型推断
不该用原因
- 写的爽,维护成本十分大
- 可读性十分差
- 学习成本高
- 不方便调试
- 使用不正确
lambda表达式与函数式接口
这是一个被吹捧成拯救世界的特性,但是是这样吗?
// Java 8之前:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Before Java8, too much code for too little to do");
}
}).start()
//Java 8方式:
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
too much code, for too little to do
Lambda expression rocks !!
当我需要进行扩展的时候
从上面的途中会发现 直接异常了,需要重写。对扩展不友好
从14年jdk7发布,宣传lambda表达式。然后被很多吹成神。到现在我很少看见大牛们使用这个特性。所以在出现到现在都不看好,也不使用lambda。
流计算API
第一次简单流计算API 是使用salsa这门语言。超级难以理解,过程无法得知,无法调试等等问题,然鸟菜啊对他十分反感。
在业务代码遇到过其他人写的流计算API,鸟菜啊是直接看不懂。当那些代码出问题,鸟菜啊去看,是在看不懂,
-
就问编写的人,你知道这些是什么意思吗?
-
同事:我也记不住了。
-
鸟菜啊问:为什么选择这种方法
-
同事: 简单啊,写得简单,
-
鸟菜啊问: 还有吗?
-
同事: 爽,高大上,潮流啊
-
鸟菜啊内心是:一万个某种动物...
从分析需求,编码,调试,校验结果,花了两天的时间...
由于上面的故事发生有点就鸟菜啊无法找到以前的代码,只能请大家看一个真实的例子流计算api的问题(请点击)
类型推断
public List<Integer> getNum(){
List<Integer> list = new ArrayList<>();
list.add(new Integer(1));
list.add(new Integer(2));
return list;
}
public void test(){}
for(var num : getNum()){
// 请问你要调用那个?
num.doubleValue();
num.intValue();
num.longValue();
}
}
上面的代码,只是简单的表达了类型推断的缺点可读性差,容易出错,
总结
总结出来的java方面一些特性,学习成本还是比较高的。在绝大部分场景是用不到的。在代码里面只用一种风格,有利于接受,直接编码(两种选择的时候,会出现一点的考虑成本)等等。统一风格(代码风格)是架构师与架构组最重要的事情之一。
代码可读性,可扩展,严谨性,学习成本永远比代码写得爽要重要
代码可读性,可扩展,严谨性,学习成本永远比代码写得爽要重要
代码可读性,可扩展,严谨性,学习成本永远比代码写得爽要重要
写得爽,维护想死。经常是别人想死,但是你接受别人的代码时候,也会不由的骂几句。
觉得适合的场景
在业务系统,功能系统里面应该杜绝这面的特性。如果是大数据开发可以使用这面的特性。但是主要流计算API里面一些细节