java更好的语言_五个使Java变得更好的功能

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

java更好的语言

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

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

相关文章

Linux 初始化系统(系统服务管理和控制程序/Init System) -- System V init(SysV init) 的简单理解

文章目录SysV init 简介SysV init 的缺点运行级别主要文件和目录的截图SysV init 简介 System V init(缩写 SysV init)是类 Unix 操作系统中传统的也是首款初始化系统。 服务配置文件(bash 脚本文件)存放在目录 /etc/init.d 下 …

oracle查询file_name,Oracle DG环境下db_file_name_convert的实际意义

关于DG环境下备库数据文件重命名的问题:**前言:**主要想表明DG环境下备库数据文件重命名的问题,以及db_file_name_convert与log_file_name_convert的作用。**实验证明:**主库为备库备份一份控制文件RMAN> backup current controlfile for …

python收集数据程序_用一行Python代码进行数据收集探索!Python真牛逼!

简易的Pandas之路 任何使用P ython数据的人都会熟悉Pandas包。P andas是大多数行和列格式数据的go-to包。 如果你没有Pandas,请确保在终端中使用pip install安装: pip install pandas 现在,让我们看看Pandas包中的默认方法可以做些什么&#…

java使用缓冲区读取文件_在Java中使用Google的协议缓冲区

java使用缓冲区读取文件最近发布了 有效的Java第三版 ,我一直对确定此类Java开发书籍的更新感兴趣,该书籍的最新版本仅通过Java 6进行了介绍 。 在此版本中,显然存在与Java 7 , Java 8和Java 9密切相关的全新项目,例如…

浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- sysvinit/systemvinit(System V init)

文章目录从 sysvinit 到 systemd什么是 init 系统,init 系统的历史和现状sysvinit 概况运行级别sysvinit 运行顺序sysvinit 和系统关闭sysvinit 的管理和控制功能haltinitkillall5lastlastbmesgpidofpoweroffrebootrunlevelshutdownsulogintelinitutmpdumpwallsysvinit 的小结从…

php /usr/lib/libjpeg.so.62,linux PHP的装配

linux PHP的安装2. 红帽Linux PHP2.1. 安装linux PHP查看系统是否自带了php,若自带先卸载,否则安装后会出错。(1)下载php源文件php-5.3.6.tar.gz,地址为http://cn2.php.net/downloads.php(2)执行如下命令,解压源文件,以…

linux多用户运行同一程序_linux系统中CentOS有哪些优势,让它长盛不衰?

CentOS是目前评价和口碑都不错的linux系统,甚至很多公司安装的都是CentOS系统,对于初入门的小白可能不了解这个系统,今天我们就整理一下CentOS系统的七大优势。1. 开源、免费众所周知,不管是微软的 Windows 还是苹果的 macOS&…

代码注释掉还能执行_日志消息是可执行代码和注释

代码注释掉还能执行尽管在一个人的代码中应添加多少注释之间存在意见分歧,但我认为可以肯定地说,大多数开发人员都同意以下代码段中的注释是多余的: // increment the total total;在该示例中,代码很简单,而且实际上是…

浅析 Linux 初始化系统(系统服务管理和控制程序/init system) -- UpStart

文章目录一、Upstart 简介(一)开发 Upstart 的缘由(二)Upstart 的特点二、Upstart 概念和术语(一)Job(二)Job 生命周期(三)事件 Event1.Signals2.Methods3.Ho…

php如何在类的外部修改成员属性,php中如何在外部修改类的私有或受保护属性值...

php中怎么在外部修改类的私有或受保护属性值在做单元测试框架时,发现了个比较郁闷的问题:测试人员需要在类外修改类的private或protected成员变量的值,而这些变量没有抽象成public的属性,同时为了代码量的问题,也不可能…

telnet到设备里 php_金融行业思科设备典型网络故障案例:76系列典型案例(一)...

一、Cisco 7606主备引擎自动切换01故障现象某行上联路由器cisco7606 x月x日引擎自行切换,这种情况是第一次发生,至今仍是备引擎是active,主引擎是standby。02分析过程思科TAC提取了log日志和crashinfo信息:Previous engine detect…

白盒测试方法静态分析_静态分析的教育方面

白盒测试方法静态分析加入我们项目的新程序员经常问我们是否有自动格式化工具,以使Java代码看起来完全像Qulice期望的那样。 (Quili是我们使用的静态分析器。)我总是回答说,拥有这样一个自动代码抛光器只会有害,并且不…

php 去除图片黑边,C#_c#扫描图片去黑边(扫描仪去黑边),自动去除图像扫描黑边复制代 - phpStudy...

/// /// 自动去除图像扫描黑边/// /// public static void AutoCutBlackEdge(string fileName){//打开图像Bitmap bmp OpenImage(fileName);RemoveBlackEdge(bmp);//保存图像SaveImage(bmp, fileName);}private static byte[] rgbValues; // 目标数组内存/// /// 图像去黑边//…

《标准普通话教程》中对平舌音的发音方法的说明

《标准普通话教程》中关于平舌音的发音方法的描述: 第一个版本:大部分教材和老师 平舌音发音时,舌尖放在下齿背(下齿龈) 第二个版本:少部分教材和老师 平舌音发音时,舌尖放在下齿背&#xff0…

java javadoc_使用Java 9向Javadoc搜索添加术语

java javadoc有一个相对较旧的网页,称为“ Proposed Javadoc Tags ”,最初似乎是与Javadoc 1.2一起编写的,其中列出了“ Sun有朝一日可能会在Javadoc中实现的标签”。 在此列表中的标签是category , example , tutoria…

oracle system用户创建job 其他用户,oracle创建表空间、用户和表以及sys和system的区别...

一、oracle的3个内置账号(口令管理)scott(示范账户) tiger 内置账号system 系统管理员 操作用户sys 超级管理员 操作数据conn system/sasa;show user登录超级用户conn a/b as sysdba 或者 sysopera/b任何账号密码都可以(只能在服务端(安装数据的电脑)上运行更改用户密码&#x…

浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- systemd

文章目录一、Systemd 的简介和特点(一)同 SysVinit 和 LSB init scripts 兼容(二)更快的启动速度(三)systemd 提供按需启动能力(四)Systemd 采用 Linux 的 Cgroup 特性跟踪和管理进程…

查询 service monitor 时发生内部错误_通过Service访问应用 (1)

目录通过Service访问应用通过Pod IP访问应用 通过ClusterIP Service在集群内部访问 通过Service访问应用通过之前的操作,应用部署完成了,我们的Demo网站已经成功启动了,那么如何访问网站呢?通过Pod IP访问应用我们可以通过Pod IP来…

jdk 8 时区 转换_使用JDK 8将收藏转换为地图

jdk 8 时区 转换我多次遇到这样的情况,希望将多个对象存储在Map中而不是Set或List中,因为将唯一标识信息的Map应用于对象有一些优势 。 Java 8通过流和Collectors.toMap(…)方法使翻译变得比以往更加容易。 使用Map而不是Set的一…

开源备份软件 oracle,oracle备份和恢复

最好把所有表删掉重新导入,表字段改变不会还原出来 ,只会还原数据1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中exp system/managerTest filed:\DB_backup\GWAMQA_Oracle\GWAM_Dev_201410311059.dmp fully2 将数据库中system用…