十一年开发经验, 谈谈Java那些令人讨厌烦人恶心的语法

搞了十几年Java开发, 我写的代码早过几百万行, 有没有一千万我就不知道了
遇到了很多令人头痛的语法, Java 你死不死啊
回头来看, Java真的让我多些了太多无用代码
今天我对比了其他脚本语言, 跟大家谈谈Java这些恶心的语法

Java语法过于严谨, 导致语法繁琐

1. 缺少 getter setter 的支持

11年前我看马士兵的Java视频教程 还记得当时他说到一个案例:

一个Java设计人员, 把Java AWT 里面的一个Point类的x, y属性给public暴露出来了, 然后被大家在代码里面大范围调用: point.x = 123 point.y =520 … , 后来这个设计人员被项目经理痛批了一顿:
" 给你说了类的属性必须要private ! , 调用必须用getX() setX() getY() setY(y)"
直到现在, Point类的x, y 属性都还是public的, 不能改回private

对于这个案例, 我想说, 为什么java就不能在编译器上支持getter 和 setter
比如这样写:

//类定义:
class Point{
	int x
	int y
	get x() {
		return x
	}
	set x(x) {
		this.x = x
	}
}

//外部调用:
Point point = new Point()
point.x = 1 //setter
point.y = 2 //setter
System.out.println(point.x) //getter

这样语法会更加简洁, 写起来更爽, 也解决了那个设计人员当时犯下的错误
(你说这是错误? 这么多年过去了, Point类相关代码肯定超过亿行, 而这个所谓的错误, 也没有造成什么坏影响)

2. 必检 try catch

Java编译器你不累吗

我草你大爷干嘛编译报错???

好烦人的try catch

哦, 原来你是希望我这样写…
可能大概是这样会更严谨…
问题来了 我改在catch里面写点什么好呢?

我是写System.out.println(“草你大爷老子找不到文件”)
还是写System.out.println(“草你大爷老子真的找不到文件呢”)

这是开发人员和和Java设计人员来自灵魂的交流…
最后我妥协了:

File file = new File("D:/1.txt");
FileInputStream fis = null;

try {
	fis = new FileInputStream(file);
} catch (FileNotFoundException e) {
	
	//王炸! 要不起
	throw new RuntimeException(e);
} 

try {
	fis.read();
} catch (IOException e) {
	
	//大哥我把异常还给你
	throw new RuntimeException(e);
}

//聪明了一手, 把sleep方法封装了一下
sleep(1000);

System.out.println("你找不到文件就找不到文件呗, 你找不到文件你系统报错就行了!");
System.out.println("你找不到文件的时候, 千万不要打印这句话, 你死机我给你满分");


private static void sleep(long ms) {
	try {
		Thread.sleep(ms);
	} catch (InterruptedException e) {
	
		//写了十几年代码, 就从来没有成功执行过这一行
		System.out.println("求求你运行到这里行不行")
		throw new RuntimeException(e);
	}
}

原本简简单单的3行代码活生生的被写成了这个样子, 面对Java编译器你和我也是无可奈何…

3. 缺少方法引用的支持

callBack = function(data) {
	print(data)
}
httpRequest("http://www.baidu.com", callBack)

比如就这么简单几行代码 (功能就是打印百度首页信息)
换到Java里面就必须得这样:

interface CallBack {
	void callBack(String data);
}

CallBack callBack = new CallBack() {
	public void callBack(String data) {
		System.out.println(data);
	}
}
httpRequest("http://www.baidu.com", callBack);

Java你死不死啊, 烦不烦啊, 一个方法引用必须要去定义一个接口才能完成
听说Java8好像支持Lambda 表达式… Lambda 可惜表达式没有方法引用好用
在编写异步代码的时候, 如果有方法引用, 可以少写太多代码

4. 缺少中转对象的支持

我想你在代码里面经常都需要一个中转对象,
这个对象只是简简单单的设值和取值, 不需要实现任何功能方法
其他语言写法:
(不需要提前声明类, 直接生成对象)

function getStudent() {
	var student = {
		name: "xx",
		age: 12
	}
	return student
}

Java 的写法:
所谓的Java Bean
知道Bean是什么意思吗?? 就是憨豆
憨, 重庆话读作莽子
也就是Java的莽子写法
再翻译一下就是Java撒逼写法


class Student {

	String name;
	int age;
	
	String getName() {
		return this.name;
	} 
	
	int getAge() {
		return this.age;
	}
	
	String setName(String name) {
		this.name = name;
	} 
	
	int setAge(age) {
		this.age = age;
	} 
}

public Student getStudent() {
	Student student = new Sdudent()
	student.setName("xx")
	student.setAge("xx") 
	return student
}
//再一次跟Java的设计人员来了一次灵魂的沟通
//大哥我不想去定义Student这个类, 太烦了

看看这么大篇代码, 烦不烦啊, 死不死啊
这种对象根本不需要提前声明嘛, 而且随着student属性的增多,
student类的代码行数也跟着增多
我还需要后期维护这个没卵用的Bean类

5. 接口虽好, 但太复杂

在你学Java的时候, 是不是觉得Interface很让你疑惑?
你疑惑就对了, 相信你自己, 你疑惑一个东西的时候
说明这个东西并不是什么非常好的东西
比如给你写一篇文章, 官话套话一大堆, 中心思想不知道在哪里
让你疑惑了, 这篇文章好吗? 答案肯定是不好

我对Interface(接口) 做了深入研究
最终还是有了伟大的发现!
你们知道Interface到底是什么吗? 作用是什么吗? 作用有多大?
我写了一篇文章讲了接口是什么鬼东西, 点击查看

Interface 象征 : 严谨 + 繁琐

Interface是什么: 对象暴露给外部使用的功能集
Interface作用: 所谓的降低类和类耦合度, 我说事实并不是这样的
Interface作用有多大: 作用没多大

Interface 是严谨了, 但是它让Java代码量增多

我们不应该去依赖接口来降低耦合度,
我推荐大家应该多多使用一些设计模式:
这里我特别推荐一定要多多使用事件模式:

lady.on("fuck", function() {
	bed.rock()
})

这是降低lady和bed间耦合度的非常好的办法!
在这段代码里, 代码的耦合度关接口什么事? 半毛钱关系都没有

没有接口的语言, 和Java这种有接口的语言比起来, 我总结了一下:
有没有接口这个东西, 都没关系, 都能完成我需要的功能

接口对项目经理还是有那么一点点用, 就是项目经理给你定义个接口, 叫你你你去给我把这个接口实现了今天就可以下班了
(没有接口不代表这个工作就分配不下去了)

有接口就是写起来复杂点, 不过没有接口我照样不会犯错误…
接口我用得很多,
但接口没给我带来的太大的好处, 真的没有
简单语法的编程语言,根本不需要接口

6.还有太多槽点我不想写了…

一个开发语言之所以能被广泛使用,
最主要的两个原因: 宣传力度,
大量类库支持

缺少类库的开发语言, 语法再简单也没人愿意使用, Java为什么能流行起来, 并不是书上说的什么鬼的安全性… 主要就是因为类库很完善 + 广告做的大
Java虽烦, 但类库支持非常全面, 也会让你少写很多代码

Java 8 之后的新语法我都没有去看了, 这些问题在Java8之后有没有改正我也不知道, 因为我基本上已经放弃Java 去使用其他语言

发布了12 篇原创文章 · 获赞 3 · 访问量 1554

猜你喜欢

转载自blog.csdn.net/lc574907580/article/details/104712010