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更好的语言

java更好的语言_五个使Java变得更好的功能相关推荐

  1. 怎么保证自动化脚本没有问题_质量保证将使设计变得自动化

    怎么保证自动化脚本没有问题 As changes in the world pick up speed, machine learning pioneers steer new technologic ...

  2. spring事物 设计模式_是什么使事物变得美丽,以及如何在设计中使用它

    spring事物 设计模式 What do you think about the phrase "beautiful design"? You like it, don't ca ...

  3. chatbot_我如何通过帮助我的ChatBot理解意图来使其变得更聪明

    chatbot by P. Daniel Tyreus 由P.Daniel Tyreus 我如何通过帮助我的ChatBot理解意图来使其变得更聪明 (How I made my ChatBot sma ...

  4. 如何使生活变得更有趣

    [如何使生活变得更有趣] 1.旺盛的求知欲 广泛的知识面.广阔的视野会让你变得更加有趣.保持好奇心,多读书.看记录片.听公开课-,知识储备丰富的人,他眼里的世界本身就是精彩纷呈的. 2.天马行空的想象 ...

  5. 五个使Java变得更好的功能

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

  6. 为什么虚拟机上一运行就显示程序停止_五分钟学Java:如何学习Java面试必考的JVM虚拟机...

    原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java ...

  7. 为什么虚拟机上一运行就显示程序停止_五分钟学Java:如何学习Java面试必考的JVM虚拟机||CSDN博文精选...

    作者:黄小斜 原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java面试中总是爱考一类问题, ...

  8. java integer最大值_五分钟学会java中的基础类型封装类

    在刚刚学习java的时候,老师不止一次的说过java是一种面向对象的语言,万物皆对象.对于java中的基础数据类型,由于为了符合java中面向对象的特点,同样也有其封装类.这篇文章对其有一个认识. 一 ...

  9. java跟c 的区别_【c++跟java的区别】java跟c语言的区别

    Java与C/C++作为编程语言的两大巨头,他们有什么区别呢?下面是小编为大家准备的c++跟java的区别,希望大家喜欢! c++的定义 C++是一种面向对象的计算机程序设计语言.C++这个词在中国大 ...

最新文章

  1. c++连连看游戏_用Python玩连连看是什么效果?
  2. 【SeeMusic】视频编辑 ( 顶部裁剪 | 底部裁剪 | 左侧裁剪 | 右侧裁剪 | 明亮度 | 对比度 | 色调 | 饱和度 )
  3. Java无处不在:使用DukeScript在任何地方运行一次编写
  4. php 浮点数 模运算,同余与模运算
  5. 【数据结构基础复习】二叉树的非递归遍历(二)
  6. Ubuntu 修复windows启动项
  7. 使用 JQuery EasyUI
  8. mysql 为什么性能不稳定_浅谈MySQL 数据库性能优化
  9. Logstash5.X 日志搜集处理框架 安装配置
  10. gnss rtcm rtklib Ntrip...
  11. Ubuntu16安装Nvidia驱动(GTX1060显卡)
  12. 外接西数固态硬盘linux,外接固态硬盘安装教程 关于外接固态硬盘安装教
  13. ffmpeg+java截取视频帧
  14. STM32CubeMX | STM32F1系列HAL库读写内部FLASH
  15. (报错解决)Exception encountered during context initialization
  16. 中望3D2022 草图综合训练
  17. 逆境之中见真章,JASMINER在众多出海企业中脱颖而出
  18. 计算机软件在生物学应用,计算机辅助教学软件在生物教学中的应用
  19. 蔡氏电路matlab,蔡氏电路matlab仿真报告.doc
  20. PySide+PyDesigner出现错误:This application failed to start because no Qt platform plugin could be initia

热门文章

  1. 【无码专区4】幸运数字4(折半搜索+计数+结论)
  2. 模板:后缀数组(SA)
  3. P5659-[CSP-S2019]树上的数【贪心】
  4. P4492-[HAOI2018]苹果树【dp】
  5. jzoj3362,bzoj3758-[NOI2013模拟]数数【分段打表,背包,状压】
  6. LVS三种模式的区别及负载均衡算法
  7. 【ajax】readyState=4并且status=200时,还进error方法
  8. Java虚拟机是如何执行线程同步的
  9. Java 可重入锁内存可见性分析
  10. 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和集合B的差集(近由在A中出现而不再B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。