十一年开发经验, 谈谈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那些令人讨厌烦人恶心的语法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/lc574907580/article/details/104712010
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/303944

相关文章

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

java如何解压zip压缩包

《java如何解压zip压缩包》:本文主要介绍java如何解压zip压缩包问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解压zip压缩包实例代码结果如下总结java解压zip压缩包坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.