五个使Java变得更好的功能

我偶然发现了Brian Goetz 提出的有关Java数据类的建议 ,立即意识到我也对如何使Java更好地成为一种语言有一些想法。 我实际上有很多,但这只是五个最重要的列表。

专制(2006),迈克·贾奇(Mike Judge)

全局变量 。 Java中有Singleton ,众所周知,它只是全局变量 。 在Java中启用全局变量并摆脱Singletons,不是很好。 PHP,JavaScript,Ruby和许多其他语言都有它们,为什么Java没有? 看下面的代码:

class User {private static final User INSTANCE;private User() {}public static User getInstance() {synchronized (User.INSTANCE) {if (User.INSTANCE == null) {User.INSTANCE = new User();}}return User.INSTANCE;}public String getName() {// return user's name}
}

然后,要访问它,我们必须使用:

String name = User.getInstance().getName();

这是一个单例。 看到它多么冗长吗? 我们可以简单地将其替换为全局变量( global是我建议使用的关键字):

global User user;

然后:

user.getName();

更少的代码编写,更容易阅读!

全局函数和命名空间

为了将静态方法组合在一起,我们创建了实用工具类 ,在其中我们必须定义私有构造函数以防止其实例化。 此外,我们还必须记住静态方法位于哪个特定的实用程序类中。这只是额外的麻烦。 我建议我们将全局函数添加到Java和可选的“命名空间”中,以对它们进行分组。 看一下这个实用程序类:

class TextUtils {private TextUtils() {}public static String trim(String text) {if (text == null) {return "";}return text.trim();}
}

现在使用命名空间查看此全局函数:

namespace TextUtils {String trim(String text) {if (text == null) {return "";}return text.trim();}
}

我的观点是,由于我们已经在使用类作为函数的集合,因此让我们更加方便。 在某些应用程序中,我们甚至不需要名称空间,而只需要全局函数,例如C和C ++。

完全访问私有属性和方法

为了从外部访问私有属性或对象的方法,我们必须使用Reflection API 。 这并不是特别困难,但是确实需要几行代码,而这些代码并不容易阅读和理解:

class Point {private int x;private int y;
}
Point point = new Point();
Field field = point.getClass().getDeclaredField("x");
field.setAccessible(true);
int x = (int) field.get(point);

我建议我们允许任何对象访问另一个对象的任何属性和方法:

Point point = new Point();
int x = point.x;

当然,如果它们是私有的,则编译器将发出警告。 在编译时,您只需忽略警告并继续。 如果您真的很关心封装,请注意警告并采取其他措施。 但是在大多数情况下,程序员会忽略它,因为他们无论如何都会愉快地使用Reflection API。

默认为NULL

让我们使用一组不完整的参数来调用构造函数和方法会很方便。 默认情况下,我们不提供的参数将设置为null 。 另外,当方法必须返回某些内容但没有return语句时,Java应该返回null 。 这几乎完全是它在PHP,Ruby和许多其他语言中的工作方式。 我相信这将是Java的便捷功能

猴子
开发人员也是如此。

当某些参数是可选的时,我们不需要定义太多方法。 方法重载非常冗长且难以理解。 相反,我们应该有一个带有一长串参数的方法。 其中一些将由调用者提供,其他一些将被设置为null 。 该方法将决定要做什么,例如:

void save(File file, String encoding) {if (encoding == null) {encoding = "UTF-8";}
}

然后,我们只调用save(f)save(f, "UTF-16") 。 该方法将理解我们的意思。 我们还可以使其更加方便,就像在Ruby中一样,通过名称提供方法参数:

save(file: f, encoding: "UTF-16");

另外,当没有任何要返回的内容时,默认情况下该方法必须返回null 。 编写return null只是浪费代码行,并不能真正提高可读性。 看一看:

String load(File file) {if (file.exists()) {return read_the_content();}
}

从这段代码中可以明显看出,如果文件存在,则该方法将加载并返回其内容。 如果不是,它将返回null ,这将为调用者提供一个很好的指示,表明某些错误和文件内容不可用。

吸气剂和二传手

我认为我们需要此功能很明显:每个私有属性都必须自动具有setter和getter 。 无需创建它们,Java将像Kotlin和Ruby一样提供现成的它们。 如果没有用于读取和修改它的getter和setter方法,那么拥有一个属性有什么意义呢?

有了这项新功能,我们将不再需要Lombok或IntelliJ IDEA的帮助。

也许我应该把我的想法变成对JCP的正式建议。 你怎么看?

您可能还会发现这些相关的帖子很有趣: 每个私有静态方法都是新类的候选人 ; 尝试。 最后。 如果。 不。 空值。 ; 为什么NULL是错误的? ; 为什么在OOP中很多退货声明是个坏主意 ; 对象可以成为朋友吗? ;

翻译自: https://www.javacodegeeks.com/2017/11/five-features-make-java-even-better.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html选中列表整列变色,excel选中行变色完整代码和动画效果

内容提要:文章介绍excel选中行变色的效果以及实现选中行变色的VBA代码。在excel中如果行数过多,经常核对数据的准确性,容易错行跳行,所以才有本文的小技巧:excel选中行变色。当我们在excel工作表中,鼠标随便…

构造函数还是静态工厂方法?

我相信Joshua Bloch在他的非常好的书“ Effective Java”中首先说了它:与构造函数相比,静态工厂方法是实例化对象的首选方法。 我不同意。 不仅因为我相信静态方法是纯粹的邪恶,而且主要是因为在这种特殊情况下,它们伪装成好的方法…

html vue分页,Vue.js bootstrap前端实现分页和排序

写之前先抱怨几句。本来一心一意做.net开发的,渐渐地成了只做前端。最近项目基本都用java做后台,我们这些.net的就成了前端,不是用wpf做界面,就是用html写web页面。深知自己前端技术不足,以前虽说用asp.net前后台都做&…

计算机管理ap,如何设置AC功能管理无线AP

AC功能管理无线AP第一步、连接ap举例型号TL-ER6520G不同类型的AP供电方式可能有所差异,包括直流电源供电和网线供电(PoE供电)两种。如下[1] 直流电源供电使用自带的电源适配器给AP供电,要求AP安放位置必须有电源插座,优点是节省成本。按照拓扑…

代表机械 计算机技术的颜色,基于机器视觉识别的交通灯控制系统

1、引言机器视觉又称计算机视觉,是用计算机来实现人的视觉功能,也就是用机器代替人眼来做测量和判断。机器视觉技术包含光源照明技术、光成像技术、传感器技术、数字图像处理技术、机械工程技术、检测控制技术、模拟与数字视频技术、计算机技术、人机接口…

java开发者工具开源版_JArchitect对Java开源贡献者免费

java开发者工具开源版JArchitect是用于Java代码库的静态分析工具,它提供交互式GUI和HTML报告,用于查找代码中过于复杂或有问题的区域,执行分析以重构并比较随时间的变化。 在版本3中,添加了类似LINQ的查询语言,该工具使…

计算机上没有启动程序怎么办,Win7开机不加载启动项怎么办

现在的电脑为了受到更好的保护,往往在开机的时候就加载了一些启动项,如:杀毒软件,安全卫士等等。可有时候会发现,在Win7操作系统中,安装后发现不能开机加载启动项。在注册表中,在msconfig中&…

线程同步,线程不同步_重新同步多线程集成测试

线程同步,线程不同步我最近在Captain Debug的Blog上偶然发现了一篇文章“ 同步多线程集成测试 ”。 那篇文章强调了设计涉及异步运行业务逻辑的被测类的集成测试的问题。 给出了这个人为的示例(我删除了一些评论): public class ThreadWrapp…

无限滚动重置服务器,简单无限滚动的实现

在使用elementUI组件库的时候,用到了无限滚动这个功能。我没有看源码,直接在网上学习了下实现的思路,然后自己手动编码以下。在此总结下。假设页面上有一个盒子容器,容器内有一些子元素。容器的高度是固定的,有纵向滚动…

Fatjars,Thinwars以及为什么OpenLiberty很酷

法特哈斯 构建一个Fatjar(或Uberjar),其中包含将应用程序很好地打包在一起运行所需的一切,这意味着您可以: java -jar myapp.jar然后离开。 没有应用程序服务器。 没有类路径。 这种方法已经被诸如Springboot之类的微…

Spring Cloud Config Server简介

1.概述 在本教程中,我们将回顾Spring Cloud Config Server的基础知识。 我们将设置一个Config Server ,然后构建一个客户端应用程序 ,该客户端应用程序在启动时会消耗配置 ,然后刷新配置而不重新启动。 我们正在构建的应用程序与《…

朴素贝叶斯算法实现分类以及Matlab实现

开始 其实在学习机器学习的一些算法,最近也一直在看这方面的东西,并且尝试着使用Matlab进行一些算法的实现。这几天一直在看得就是贝叶斯算法实现一个分类问题。大概经过了一下这个过程: 看书→算法公式推演→网上查询资料→进一步理解→搜…

位操作基础篇之位操作全面总结

转载自 http://blog.csdn.net/morewindows/article/details/7354571 Title: 位操作基础篇之位操作全面总结 KeyWord: C/C 位操作 位操作技巧 判断奇偶 交换两数 变换符号 求绝对值 位操作压缩空间 筛素数 位操作趣味应用 位操作笔试面试 位操作篇共分为基础篇和提高…

机器学习中的算法-支持向量机(SVM)基础

机器学习中的算法-支持向量机(SVM)基础 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleastgmail.com。也可以加我的微博: leftnotea…

算法题:输入aaaabbbcccccc输出a4b3c6。

今日在地铁上浏览今日头条的时候看到这么个小题目,说是输出一长串字符串,输出字母串类别并且统计其出现次数,然后按照顺序将其输出来。例如输入aaaabbbcccccc,输出a4b3c6。 最近也一直在学习,所以就想着就Matlab来试了…

Java World中的GraphQL简介

许多人认为GraphQL仅适用于前端和JavaScript,它在Java等后端技术中没有定位,但事实确实如此。 还经常将GraphQL与REST进行比较,但是这种比较是否合理? 首先,让我开始回答其中最重要的问题。 什么是GraphQL&#xff1…

算法题:在一个字符串中找到只出现一次的字符。如输入abaccdeeff,则输出bd。

今天的算法学习还是和字符串有关,这个题目据说是以前的某公司面试的笔试题目。题目意思就是说,在一个字符串中找到只出现了一次的那些字符,并且输出来。 作为非IT的我,平时使用Matlab比较多。不是科班出身,对于这个题…

Kafka的Spring Cloud Stream

总览 该示例项目演示了如何使用事件驱动的体系结构 , Spring Boot ,Spring Cloud Stream, Apache Kafka和Lombok构建实时流应用程序。 在本教程结束时,您将运行一个简单的基于Spring Boot的Greetings微服务 从REST API获取消息 …

常见的股票技术因子学习以及计算

最近在看《量化投资数据挖掘技术与实践(MATLAB版)》。学习了其中的常见的股票衍生变量,并且利用WIND金融数据终端的matlab借口windmatlab导出一些数据进行了一个简单的学习。特此记录。 下面是我对于书中提到的几个因子的学习总结&#xff1…

Java – HashMap详细说明

HashMap基于哈希算法工作,根据Java文档HashMap具有以下四个构造函数, 建设者 描述 HashMap ​() 构造一个空的 具有默认初始容量(16)和默认加载因子(0.75)的HashMap 。 HashMap ​(int initialCapaci…