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

本文主要是介绍十一年开发经验, 谈谈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 xint yget 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 去使用其他语言

这篇关于十一年开发经验, 谈谈Java那些令人讨厌烦人恶心的语法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/303944

相关文章

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决Spring运行时报错:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

《解决Spring运行时报错:Considerdefiningabeanoftype‘xxx.xxx.xxx.Xxx‘inyourconfiguration》该文章主要讲述了在使用S... 目录问题分析解决方案总结问题Description:Parameter 0 of constructor in x

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在