当前位置: 首页 > 面试题库 >

Java 13中新的关键字“ yield”是什么意思?

萧卜霸
2023-03-14
问题内容

Java 13引入了 yield 用于switch表达式的关键字。

如何使用它,与默认值returnbreak值有什么区别?


问题答案:

问答环节

如何使用?

  1. 需要完整块时,带有箭头标签:

    int value = switch (greeting) {
    case "hi" -> {
        System.out.println("I am not just yielding!");
        yield 1;
    }
    case "hello" -> {
        System.out.println("Me too.");
        yield 2;
    }
    default -> {
        System.out.println("OK");
        yield -1;
    }
    

    };

  2. 使用传统积木:

    int value = switch (greeting) {
    case "hi":
        System.out.println("I am not just yielding!");
        yield 1;
    case "hello":
        System.out.println("Me too.");
        yield 2;
    default:
        System.out.println("OK");
        yield -1;
    

    };

默认收益有什么区别?

一条return语句将控制权返回给 方法
(第8.4节,第§15.12节)或
构造函数
(第8.8节和第15.9节)
调用者, 而一条yield语句则通过 使一个封闭的switch表达式产生一个指定值来转移控制权。


突破值有什么区别?

break值为语句赞成的下降yield声明。

规范

JLS 13附带有JEP
354规范,该规范总结了我们需要了解的有关新产品的所有信息。请注意,它没有被合并到语言规范中,因为它仍然是预览功能,因此不是该语言的永久组成部分。switch

一条yield语句通过使一个封闭的switch表达式产生一个指定值来转移控制权。

YieldStatement:
    yield Expression;

一条yield语句试图将控制权转移到最内层的switch表达式;该表达式(称为 yield target
)然后立即正常完成,并且的值Expression成为switch表达式的值。

  • 如果yield语句没有屈服目标,则是编译时错误。

  • 如果yield目标包含包围yield语句的任何方法,构造函数,初始化程序或lambda表达式,则是编译时错误。

  • 这是一个编译时错误,如果Expression一个的yield声明是无效的(15.1)。

执行yield语句首先评估Expression。如果由于Expression某种原因突然完成了评估,则该yield语句由于该原因而突然完成。如果对值的评估Expression正常完成,则产生一个值V,然后该yield语句突然完成,原因是带有值的产量V



 类似资料:
  • 问题内容: 在此MySQL表定义中: 什么是关键字是什么意思?它不是主键,也不是外键,所以它仅仅是索引吗?如果是这样,用这种方法创建的这种索引有何特别之处? 问题答案: 从http://dev.mysql.com/doc/refman/5.1/en/create- table.html 引用 所以是一个;)

  • 问题内容: python中“ yield”关键字有什么作用? 问题答案: 要了解其作用,你必须了解什么是生成器。并且,在你了解生成器之前,你必须了解。 可迭代 创建列表时,可以一一阅读它的项目。逐一读取其项称为迭代: 是一个可迭代的。当你使用列表推导时,你将创建一个列表,因此是可迭代的: 你可以使用的所有“ for… in…”都是可迭代的;lists,strings,文件… 这些可迭代的方法很方便

  • rank ▲ ✰ vote url 1 2888 2315 4033 url Python中关键字yield有什么作用? yield有什么用? 例如下面这段代码: def node._get_child_candidates(self, distance, min_dist, max_dist): if self._leftchild and distance - max_dist < s

  • 问题内容: 请看以下示例: 我已将的功能标记为。这到底是什么意思?我在子类中完全省略了它,并且编译器完全没有抱怨。那么,它是如何要求的呢? 问题答案: 请参见“自动初始化继承”: 规则1 如果子类没有定义任何指定的初始化器,它将自动继承其所有超类指定的初始化器。 规则2 如果您的子类提供了其所有超类指定初始化器的实现(通过按规则1继承它们,或通过提供自定义实现作为其定义的一部分),则它会自动继承所

  • 问题内容: 我最近偶然发现了以下代码: 我以前从未看过这个关键字。尝试运行我得到的代码 解析错误:语法错误,第x行上出现意外的T_VARIABLE 那么这个关键字是什么呢?它甚至是有效的PHP吗?如果是,该如何使用? 问题答案: 什么啊 该关键字从发电机函数返回数据: 生成器函数的核心是yield关键字。以最简单的形式,yield语句看起来很像return语句,除了yield而不是停止函数的执行并

  • 问题内容: 我看见某个地方 问题答案: Google是您的朋友- 抢手货 -您还可以先看看什么是序列化。 它将成员变量持久化为字节流时标记为不序列化。通过网络传输对象时,需要对该对象进行“序列化”。序列化将对象状态转换为串行字节。这些字节通过网络发送,并且从这些字节中重新创建对象。由java暂态关键字标记的成员变量不会被传输,它们是有意丢失的。 此处的示例,稍作修改(感谢@pgras):