java更好的语言_Java,如果这是一个更好的世界

java更好的语言

只是梦想着有一个更好的世界,在该世界中,Java平台中的一些旧错误已得到纠正,而某些令人敬畏的缺失功能也已实现。 不要误会我的意思。 我认为Java很棒。 但是它仍然存在一些问题,就像其他平台一样。 我没有任何特定的命令,没有声称自己几乎是详尽无遗的,最重要的是,没有宣称自己经过深思熟虑和完全正确,我希望这些事情:

可串行性

在对象内,可串行性是默认设置。 如果您不希望成员可序列化,则将其标记为“瞬态”。 为什么在地球上我们必须添加这个愚蠢的标记

接口“可序列化”到我们所有的类?

默认情况下,所有对象都应可序列化。 非可销售性应该是明确标记的“功能”

当然,可序列化性本身具有许多我不会涉及的奇怪细节,在这里

克隆

由于默认情况下所有对象都应可序列化,

默认情况下,所有对象也应该是可克隆的。 不可克隆性应该是明确标记的“功能”

此外,浅克隆几乎从未有用。 因此

默认情况下,所有对象都应深克隆自己。 浅克隆可以显式实现

注意,clone方法应该是java.lang.System或某些其他实用程序中的某些本机方法。 它不应位于java.lang.Object上,从而允许客户端代码实现正确的克隆解释,而不会发生任何偶然的名称冲突。 或者,可以实现类似的私有回调方法,如果应定制克隆,则采用与序列化相同的方式。

无符号数字

为什么这不是Java的一部分?

所有整数基元以及java.lang.Number包装器都应该有一个无符号版本。

原语

基元是API支持的一种痛苦。 从语法角度来看,int和Integer应该相同。 int []和Integer []也应该是

基元及其包装器应更好地集成到语言和JVM中

如果不放弃真正的原语所提供的性能优势,这可能是无法真正解决的。 看到Scala…

物产

Getter和Setter并不是最先进的技术。

应该更正式地支持属性

另请参阅此博客上的最新文章及其评论: http : //blog.jooq.org/2013/01/12/bloated-javabeans-part-ii-or-dont-add-getters-to-your-api/

馆藏

集合API应该更好地与该语言集成。 与许多其他语言一样,应该可以使用方括号和花括号取消引用集合的内容。 JSON语法将是显而易见的选择。 应该可以这样写:

// Translates to new ArrayList<>(...);
List<Integer> list = [ 1, 2, 3 ];// Translates to list.get(0);
Integer value = list[0];// Translates to list.set(0, 3);
list[0] = 3;// Translates to list.add(4);
list[] = 4;// Translates to new LinkedHashMap<>(...);
Map<String, Integer> map = { 'A': 1, 'B': 2 }; // Translates to map.get(0);
Integer value = map['A']// Translates to map.put('C', 3);
map['C'] = 3;

线程本地

在某些情况下,ThreadLocal可能是一件好事。 ThreadLocal的概念可能不是100%合理的, 因为它可能导致内存泄漏 。 但是假设没有问题,

threadlocal应该是关键字,例如volatile和transient

如果transient值得作为关键字,那么threadlocal也应该是。 它的工作方式如下:

class Foo {threadlocal Integer bar;void baz() {bar = 1;           // Corresponds to ThreadLocal.set()Integer baz = bar; // Corresponds to ThreadLocal.get()bar = null;        // Corresponds to ThreadLocal.remove()}
}

当然,这样的关键字也可以应用于原语

参考资料

引用在Java中有些奇怪。 它们在java.lang.ref包中作为Java对象实现,但JVM和GC对其进行了特殊处理。

就像threadlocal一样,应该有关键字来表示参考

当然,随着泛型的引入,添加这样的关键字几乎没有收获。 但是,有些类在JVM中“非常特殊”,但不是语言语法功能,仍然令人感到难闻。

反射

请! 为什么在地球上必须如此冗长? 为什么Java(Java语言)不能更加动态? 我不是在寻求一种Smalltalk-动态的功能,但是反射不能像语法糖那样以某种方式内置到语言中吗?

Java语言应允许特殊的语法进行反射

当然,可以在库级别上实现一些缓解。 乔是一个例子。 还有很多。

介面

Java中的接口总是感觉很奇怪。 特别是,使用Java 8的扩展方法时,随着它们向抽象类靠拢,它们开始失去生存的权利。 当然,即使使用Java 8,主要区别也在于类不允许多重继承。 接口可以–至少,它们允许规范(抽象方法)和行为(默认方法)的多重继承,而不是状态的继承。

但是他们仍然感到很奇怪,主要是因为它们的语法与类不同,而它们的功能却在融合。 lambda专家组为何决定引入默认关键字? 如果接口允许使用抽象方法(如今天)和具体方法(防御器方法,扩展方法),为什么接口的语法不能与类相同? 我没有运气就问过专家组: http : //mail.openjdk.java.net/pipermail/lambda-dev/2012-August/005393.html 。 不过,我还是希望……

接口语法应与类语法完全相同

这包括静态方法,最终方法,私有方法,程序包私有方法,受保护的方法等。

默认可见性

默认可见性不应通过缺少private / protected / public关键字来指定。 首先,在类和接口中无法用相同的方式处理这种缺失。 然后,它不是很可读。

默认可见性应通过“包”或“本地”或类似关键字指定

文字

这将是日常工作中的绝佳补充。

应该有列表,映射,正则表达式,元组,记录,字符串(改进),范围文字

我之前已经在此发布过博客: http : //blog.jooq.org/2012/06/01/array-list-set-map-tuple-record-literals-in-java/ 。 布莱恩·格茨(Brian Goetz)在lambda-dev邮件列表上提到的一些想法在这里找到: http : //mail.openjdk.java.net/pipermail/lambda-dev/2012-May/004979.html

#[ 1, 2, 3 ]                          // Array, list, set
#{ 'foo' : 'bar', 'blah' : 'wooga' }  // Map literals
#/(\d+)$/                             // Regex
#(a, b)                               // Tuple
#(a: 3, b: 4)                         // Record
#'There are {foo.size()} foos'        // String literal

我会加

#(1..10)                              // Range (producing a List)

最后

方法,属性,参数,局部变量,都可以声明为“最终”。 在许多方面,不变性是一件好事,应予以鼓励(我很快会在博客中介绍)。 其他语言(例如Scala)区分“ val”和“ var”关键字。 除了那些其他语言令人印象深刻的类型推断功能外,在大多数情况下,val比var更可取。 如果要表达可修改的变量,他们仍然可以使用“ var”

Final应该是成员,参数和局部变量的默认行为

覆写

意外重写方法很危险。 其他语言通过在覆盖上导致编译错误来解决此问题

应该引入重写关键字以显式重写方法

可以将某些Java编译器(例如Eclipse编译器)配置为在缺少java.lang.Override批注时发出警告/错误。 但是,这实际上应该是关键字,而不是注释。

模组

依赖管理是Java的噩梦。 还有另一种语言可以根据模块构建编译单元: Fantom 。 Stephen Colebourne(JodaTime的家伙)是Fantom的忠实粉丝,并在Devoxx上发表了演讲。 他还不时发布有关Fantom的博客: http : //blog.joda.org/search/label/fantom

编译单元应以“模块” / jar文件的形式表示

当然,这会使Maven过时,因为Java编译器可以更好地处理依赖关系。

变量和泛型

来吧。 @SafeVarargs ?? 当然,由于泛型类型擦除,这永远无法完全正确解决。 但是还是

不应有泛型类型擦除

元组和记录

我真的认为这是Java缺少的东西

元组和记录应该有语言支持

Scala集成了最多22个元组,.NET支持最多8个元组。这在Java语言中也是一个不错的功能。 具体来说,记录(或结构)将是一件很不错的事情。 如前所述,元组和记录也应使用文字。 遵循以下原则:

#(a, b)                               // Tuple
#(a: 3, b: 4)                         // Record

编译器

远远超出添加一些注释处理的编译器API会很好。 我很希望能够扩展Java语言本身。 我想将SQL语句直接嵌入Java代码,类似于可嵌入PL / SQLSQL。 当然,此类SQL代码将由jOOQ之类的库支持 。

编译器API应该允许任意语言扩展

当然,这种改进的编译器API应该以一种自动完成,语法突出显示和其他功能在Eclipse之类的IDE中自动运行的方式来完成,因为编译器扩展将能够向IDE公开必要的工件。 好,我同意,这种改善是很多梦想

类型推断

如果没有歧义,难道类型推断就不会像Scala一样强大吗? 我不想写下每个局部变量的完整类型。 应该支持Scala的本地类型推断

运算符重载

好的,这是一个高度宗教性的话题。 你们中的许多人不同意。 但是我喜欢

Java应该支持运算符重载

使用操作符而不是方法可以更好地表达某些库操作。 想一想BigInteger和BigDecimal的冗长冗长的API。

添加评论!

当然,缺少lambda和扩展方法,并且泛型也被删除。 虽然后者永远不会修复,但是第一个将在Java 8中使用。因此,请原谅Sun和Oracle,让我们等了很长时间等待lambda。

参考: Java,如果这是我们的JCG合作伙伴 Lukas Eder在JAVA,SQL和JOOQ博客上提出的更好的世界 。

翻译自: https://www.javacodegeeks.com/2013/02/java-if-this-were-a-better-world.html

java更好的语言

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

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

相关文章

anaconda安装成功测试_学习笔记120—Win10 成功安装Anaconda 【亲测有效,需注意几点!!!】...

Win10 下安装 Anaconda一、下载安装 Anaconda(勾选 PATH)&#xff1a;Anaconda 是专注于数据分析的 Python 发行版本&#xff0c;包含了 conda、Python 等 190 多个科学包及其依赖项。使用 Anaconda 的好处在于可以省去很多配置环境的步 骤&#xff0c;省时省心又便于分析。下载…

Pytorch 词嵌入word_embedding1初识

torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, sparse=False)参数所表示的含义: num_embeddings (int) :嵌入字典的大小 embedding_dim (int) :每个嵌入向量的大小 padding_idx (int, optio…

Python语言 目录

待续.... 转载于:https://www.cnblogs.com/jiangchunsheng/p/11077884.html

JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等

Java 9距离&#xff08;希望&#xff09;数月了&#xff0c;现在该讨论一下即将发生的变化以及您应该采取的措施 Java 9即将来临&#xff08;我们正在计算到达的日子 &#xff09;&#xff0c;其中包含一系列新功能和改进功能。 这就是为什么我们决定创建一份清单来准备自己的…

Pytorch 词嵌入word_embedding2实例(加载已训练词向量)

目录 1、加载已训练好的词嵌入 2、是否需要重新训练词嵌入 3、不重新训练词嵌入时优化器设置

IPv4数据报格式及其语义

IPv4数据报格式及其语义 一、IP数据报的格式如下图所示 版本 首部长度 服务类型 数据报长度 16比特标识 标志 13比特片偏移 寿命 上层协议 首部检验和 32比特源IP地址 32比特目的IP地址 选项&#xff08;如果有的话&#xff09; 数据 IPv4数据报格式 二、各部分语…

华景机器人怎么控制_【华景QQ机器人怎么用】华景QQ机器人好不好_使用技巧-ZOL软件百科...

发布日期&#xff1a;2016年02月21日 Release 2 && Release 3新增功能和优化及修复修复严重崩溃问题。全面支持emoji表情。修复某些用户不能登录。轻量级重包处理。优化消息显示。修复一个数组越界错误。修复一个数组下标不能为0错误。加快消息处理速度。UI线程与消息处…

Java命令行界面(第9部分):parse-cmd

parse-cmd库由单个类ParseCmd.java组成&#xff0c;该类是“用于在Java应用程序中定义和解析命令行参数的Java类。” 该库托管在Google Code存档上 &#xff0c;因此可以随时关闭 。 该JAR似乎也可以在GitHub上使用 。 这篇文章介绍了如何使用parse-cmd 0.0.93处理Java中的命令…

Pytorch--Tensor, Numpy--Array,Python--List 相互之间的转换

1、 Python--List Numpy--Array list = [[1, 2, 4, 8], [0.1, 0.4, 0.9, 0.8]] list_np = np.array(list) print(list_np的维度:,list_np.shape) print(list_np的类型:,type(list_np))运行结果: 2、Python--List Pytorch--Tensor test = [[1, 2, 4, 8], [0.1, 0.4, 0…

Redis的各项功能解决了哪些问题?

Redis是什么 官方简介解释到&#xff1a;Redis是一个基于BSD开源的项目&#xff0c;是一个把结构化的数据放在内存中的一个存储系统&#xff0c;你可以把它作为数据库&#xff0c;缓存和消息中间件来使用。 同时支持strings&#xff0c;lists&#xff0c;hashes&#xff0c;set…

join left semi_HIVE--left semi join

实验&#xff1a;hive> select * from b1;OK1 003 201705111 004 201705121 005 201705132 006 201705143 007 20170515Time taken: 0.041 secondshive> select * from b2;OK1 005 201705132 006 …

java permgen_Java 8:从PermGen到元空间

java permgen您可能已经知道&#xff0c;现在可以下载JDK 8 Early Access 。 这使Java开发人员可以尝试Java 8的某些新语言和运行时功能。这些功能之一是完全删除自Oracle自JDK 7发行以来就宣布的Permanent Generation&#xff08;PermGen&#xff09;空间。例如&#xff0c;自…

总结

写在前面 课程名称&#xff1a;软件工程原理及方法 课程链接&#xff1a;https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求&#xff1a;https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3393 团队名称&#xff1a;求莫名堂 请…

Pytorch GRU(详解GRU+torch.nn.GRU()实现)

pytorch GRU 目录 pytorch GRU 一、GRU简介1 二、GRU简介2 三、pytorch GRU 3.1 定义GRU ()

同步装饰器来替换线程安全类

您知道什么是线程安全吗&#xff1f; 如果没有&#xff0c;下面是一个简单的示例。 所有类都必须是线程安全的&#xff0c;对吗&#xff1f; 并不是的。 其中一些必须是线程安全的&#xff1f; 又错了。 我认为它们都不必是线程安全的&#xff0c;而它们都必须提供同步的装饰器…

creo减速器建模实例_3.16减速器箱体附件建模

本节内容主要介绍了减速器箱体附件建模&#xff0c;视频时长24分32秒。本节主要通过阵列&#xff0c;拉伸&#xff0c;孔等命令完成创建&#xff0c;操作时注意孔的类型的选择&#xff0c;以及定位基准的选择&#xff0c;学习时要掌握其减速器附件的设计。简要操作步骤&#xf…

回文数

问题 A: 回文数 时间限制: 1 Sec 内存限制: 32 MB提交: 1705 解决: 512[提交][状态][讨论版]题目描述 我们把从左往右和从右往左念起来相同的数字叫做回文数。例如&#xff0c;75457就是一个回文数。当然某个数用某个进制表示不是回文数&#xff0c;但是用别的进制表示可能就…

Pytorch RNN(详解RNN+torch.nn.RNN()实现)

目录 一、RNN简介 二、RNN简介2 三、pytorch RNN 3.1 定义RNN()

git ssh创建分支_【ssh简单版git-server 1】自建git-server

环境&#xff1a;centos和ubuntu系统都可以CentOS release 6.7git version 1.7.1git-server 192.168.50.108git-client 192.168.50.112备注&#xff1a;基于linux系统下做ssh模式的gitserver&#xff0c;需要ssh免密钥&#xff0c;因为git用户是禁止登录的&#xff0c;clone时没…

使用js将后台返回的数据转换成树形结构

将类似如下数据转换成树形的数据&#xff1a; [{ id: 1, name: 1, },{ id: 2, name: 1-1, parentId: 1 },{ id: 3, name: 1-1-1, parentId: 2 },{ id: 4, name: 1-2, parentId: 1 },{ id: 5, name: 1-2-2, parentId: 4 },{ id: 6, name: 1-1-1-1, parentId: 3 },{ id: 7, name:…