当前位置: 首页 > 知识库问答 >
问题:

在Java八节中,“糖”、“不糖”是什么意思?

游乐池
2023-03-14

我在Java福音8章经常听到“sugaring”和“desugaring”,这两个词是什么意思?它们是概念性的还是句法性的。

例如:

默认迭代循环恢复为Java

关于编译中的句法糖的观察。

共有2个答案

呼延骏俊
2023-03-14

“脱俗语”在Java福音8章似乎有一个非常具体的含义。它似乎是一个包罗万象的术语,用来表示lambda表达式可能绑定到实际的具体方法调用的各种方式。

如果您对细节感兴趣,这篇关于“Lambda表达式的翻译”的文档提供了正在发生的事情的真实细节。

文档中的一个关键短语:

将lambda转换为字节码的第一步是将lambda主体解聚为一个方法

丘智志
2023-03-14

在编程中,sugar通常指的是那些甜蜜的添加,主要是快捷方式,它们使某些构造更易于键入和阅读(实际上,后者在程序的生命周期中是最重要的)。

Wikipedia有句法糖的定义,但您应该注意,并非所有的糖本质上都是句法的(并非所有最近的sweet添加都只是编译器的更改)。

以下是几个例子:

  • 后缀和前缀增量运算符(i++++i)。他们唯一的目的是避免写额外的声明。它们是纯糖。
  • +=,=,&=等都是由同一种糖制成的。
  • 基元类型和对象之间的隐式转换也很重要。
  • 类型推断也很重要。
  • Java 8附带的lambda表达式是另一种糖(这一个不仅仅是语法)

Java被普遍认为不够简洁,特别是与现代html" target="_blank">语言相比。这就是为什么那些帮助代码更快阅读的添加是受欢迎的。

最后,我要指出的是,虽然缺乏糖会使你的程序变得肥胖,但过多的糖会导致用多种不同的方法来编写相同的东西,会使你的语言变得反胃,使你的程序更不连贯,更难维护。另一种糖,API糖,通常是一种瘟疫,使API更难掌握,特别是当它是由添加(例如超载)。

话虽如此,desugaring指的要么是

  • 删除语言中所有冗余内容的过程
  • 代码处理器找出sugared语句背后的内容的过程(例如,这可能涉及类型推断)
 类似资料:
  • Java 的语法比 C/C++ 友好很多, 因为它设计之初,就是为了考虑到程序员的使用是否舒适。 当然很多事情愿望是美好的,现实是残酷的。Java 语言本身的语法仍然不可避免的带有着 10年前那种 的僵硬和严谨。这里是一些小小的尝试,你会发现,大多数情况,通过一些静态函数,一行代码完全 可以做很多事情, 而且比“甜甜”的 Ruby 也差不了太多。 你可以查看 org.nutz.lang Git@O

  • 在输出的唯一一行上,打印一个整数,描述Alice必须给出的糖果的最小数量。 爱丽丝必须给的糖果数是1、2和1。 且每个子级的分级不大于10^5。

  • 我是新来的javascript/玉。我正试图创建一个简单的例子,在一个玉模板文件中使用甜言蜜语2。当我运行以下内容时,我会收到“帮助我”警报,但当我到达swal线时,我会收到: ReferenceError:未定义swal 应该注意的是,我是在一个基于express/node.js的玩具应用程序中运行它的。通过从代码中复制位置并将它们插入浏览器上的另一个选项卡,我已经验证了sweetalert2.

  • 我试图在我的代码中使用PrimitiveIterator.Ofint、PrimitiveIterator.Oflong等。我的最小SDK版本是16,因此为了获得对Java8类和接口的支持,我遵循了如下所示的API desugaring步骤: https://developer.android.com/studio/write/java8-support#Library-desugaring 在这之

  • 问题内容: 我已经看到了声明,接口和类 这是什么意思? 问题答案: 没有证据,我相信您在谈论Java的泛型支持… 泛型允许您抽象类型 在Java 5之前,很难提供能够支持多种不同类型的Objects的类而不必为每种特定情况编写代码,因此人们通常会这样做。 这导致在运行时做出许多困难的选择,您必须进行运行时检查以查看是否有可能将给定的Object强制转换为可用类型…例如 现在,这已经很明显了,但是如