九江企业网站的建设,网站制作多少钱方案,wordpress完整教程 pdf,上鼎工程建设有限公司网站java更好的语言只是梦想着有一个更好的世界#xff0c;在该世界中#xff0c;Java平台中的一些旧错误已得到纠正#xff0c;而某些令人敬畏的缺失功能也已实现。 不要误会我的意思。 我认为Java很棒。 但是它仍然存在一些问题#xff0c;就像其他平台一样。 我没有任何特定… 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(...);
ListInteger 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(...);
MapString, 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中“非常特殊”但不是语言语法功能仍然令人感到难闻。 反射 请 为什么在地球上必须如此冗长 为什么JavaJava语言不能更加动态 我不是在寻求一种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 ColebourneJodaTime的家伙是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在JAVASQL和JOOQ博客上提出的更好的世界 。 翻译自: https://www.javacodegeeks.com/2013/02/java-if-this-were-a-better-world.htmljava更好的语言