首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin 1.2 的新增特性

例如,当一个 lambda 作为构造函数参数传递给一个对象时,后者可以用于引用另一个必须稍后定义的对象: lateinit修饰符现在可以用在顶级属性和局部变量上。...弃用:数据类的覆写性拷贝 当从已经具有相同签名的拷贝函数的类型派生数据类时,为数据类生成的 copy 实现使用父类型的默认函数,会导致出现与预期相反的行为,如果父类型没有默认参数,则在运行时失败 导致复制冲突的继承已经被...不幸的是,当构造函数调用的参数中存在这样的表达式时,一些字节码处理工具不能很好地处理这些代码。...这可以改变类加载和初始化的顺序 preserve-class-initialization —— 为构造函数调用生成类 Java 字节码,以确保保持类初始化顺序。...这可能会影响应用程序的整体性能;仅在多个类之间共享一些复杂的状态并在类初始化时更新时才使用它。 “手工”的解决方法是将控制流的子表达式的值存储在变量中,而不是直接在调用参数中对它们进行求值。

2.8K70

Kotlin 1.2 的新增了哪些特性?

例如,当一个 lambda 作为构造函数参数传递给一个对象时,后者可以用于引用另一个必须稍后定义的对象: lateinit修饰符现在可以用在顶级属性和局部变量上。...改进 smart cast 当一个变量从一个安全调用表达式中被赋值并且被检查为 null 时,smart cast 也被应用到安全调用接收器中: ?...弃用:数据类的覆写性拷贝 当从已经具有相同签名的拷贝函数的类型派生数据类时,为数据类生成的 copy 实现使用父类型的默认函数,会导致出现与预期相反的行为,如果父类型没有默认参数,则在运行时失败 导致复制冲突的继承已经被...不幸的是,当构造函数调用的参数中存在这样的表达式时,一些字节码处理工具不能很好地处理这些代码。...这可能会影响应用程序的整体性能;仅在多个类之间共享一些复杂的状态并在类初始化时更新时才使用它。 “手工”的解决方法是将控制流的子表达式的值存储在变量中,而不是直接在调用参数中对它们进行求值。

2.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 中文官方教程 2022 版(二)

    你不能声明多个具有相同名称和相同数量及类型参数的方法,因为编译器无法区分它们。 编译器在区分方法时不考虑返回类型,因此即使它们具有不同的返回类型,也不能声明具有相同签名的两个方法。...由于它们具有不同的参数列表,两个构造函数都可以在Bicycle中声明。与方法一样,Java 平台根据参数列表中参数的数量和类型区分构造函数。...你不能为同一个类编写具有相同数量和类型参数的两个构造函数,因为平台无法区分它们。这样做会导致编译时错误。 你不必为你的类提供任何构造函数,但在这样做时必须小心。...这些参数在方法体中被使用,并在运行时将采用传递的参数的值。 注意: 参数指的是方法声明中的变量列表。参数是在调用方法时传递的实际值。当您调用方法时,使用的参数必须与声明的参数在类型和顺序上匹配。...参数名称 当您向方法或构造函数声明参数时,为该参数提供一个名称。此名称在方法体内用于引用传入的参数。 参数的名称在其作用域内必须是唯一的。

    22300

    【笔记】《C++Primer》—— 第18章:用于大型程序的工具

    标准库类型都保证自己的析构不会抛出异常 异常自然也可能在构造函数出现,如果我们在构造函数体中初始化成员自然可以用try-catch处理,但是初始值列表在返回之外,为了处理初始值列表的异常我们需要用函数try...要注意是构造函数开始执行后的异常,如果是参数初始化过程中发生的异常则需要调用者自己在上下文中处理 异常发生时抛出的异常对象是一种特殊的对象,可以是类对象也可以是函数或数组指针。...编译器使用异常抛出表达式来对类异常对象进行拷贝初始化,因此异常对象必须是完全类型的,而且必须拥有相应的构造函数,函数和数组则必须可以转换为指针 异常对象位于编译器管理的空间中,这保证了不管是链上的哪个catch...要注意的是基类的构造顺序是与派生列表中基类的出现顺序一致,与派生类参数顺序无关 C11中允许派生类从多个基类中继承构造函数,但是如果多个构造函数都相同的话将产生错误,此时派生类应该自己定义一个构造函数来覆盖它们...析构函数的调用顺序与构造顺序相反的特性仍在 合成拷贝移动等操作的规则也与之前一致 我们可以用基类指针指向派生类对象,但是调用对应函数的时候编译器不会觉得不同方向的转换有好坏之分,因此当有多个接受不同基类参数但名字相同的函数时

    1K20

    JavaScript 权威指南第七版(GPT 重译)(二)

    数组初始化器是方括号内包含的逗号分隔的表达式列表。数组初始化器的值是一个新创建的数组。...函数定义表达式通常由关键字function后跟一个逗号分隔的零个或多个标识符(参数名称)的列表(在括号中)和一个 JavaScript 代码块(函数体)在花括号中组成。...函数表达式后跟一个开括号,一个逗号分隔的零个或多个参数表达式列表,以及一个闭括号。...当调用表达式被评估时,首先评估函数表达式,然后评估参数表达式以生成参数值列表。如果函数表达式的值不是函数,则会抛出 TypeError。...如果左侧对象是右侧类的实例,则运算符评估为true,否则评估为false。第九章解释了在 JavaScript 中,对象类由初始化它们的构造函数定义。

    53210

    Java课程主要内容回顾

    参数声明指定了方法接受的参数类型和参数名。 在Java中,方法可以拥有相同的名称但具有不同的参数列表,这就是方法的重载(Overloading)。...方法重载允许在同一个类中定义多个具有相同名称但参数列表不同的方法。...构造方法可以重载吗?一个类可以有多个构造方法吗? 构造方法与类同名,没有返回值。构造方法可以重载,即在同一个类中可以有多个构造方法,它们具有不同的参数列表,参数表为空的,叫缺省构造方法。...覆盖只能通过子类覆盖父类的方法;重载可以在同一个类中定义多个具有相同名称但不同参数列表的方法。 总体来说,覆盖是方法的多态性表现,重载是方法的多样性表现。...可以在类中间定义一些语句块,语句块前面还可以加static。初始化块(包括静态初始化块和非静态初始化块)的执行顺序优先于构造方法。当创建类的实例时,会先执行初始化块,然后才执行构造方法。

    10710

    【笔记】《深入理解C++11》(上)

    初始化列表的效果总是慢于就地初始化, 但也快过在构造函数中进行赋值 注意: 非常量的静态变量依然要在头文件外定义从而保证在程序中只存在一个 sizeof()可以对类成员表达式使用了 类模板也可以声明友元了...)的访问, 从而在外部可以自动调用基类构造 C++11中继承构造函数和其他默认函数一样, 存在隐式声明的默认版本, 且如果不被使用就不会生成 继承构造函数的默认参数不会被继承, 反而会生成多个不同声明的构造函数的产生..., 所以当发生冲突的时候应该显式声明构造函数来因此冲突的函数 当派生类是虚继承了基类时, 不能使用继承构造函数 一旦使用了继承构造函数(用using Base::Base;)暴露出来, 自身的默认构造函数就和之前的隐藏规则一样...不但可以调用基类的构造函数, 也可以调用当前类的其他构造函数, 这样就能进一步减少重复代码 但要注意委派构造不能和普通的初始化列表共用, 因为目标构造(初始化列表)总是先于委派构造被调用, 这会导致目标构造的参数无效..., 例如当存在非POD成员且这个成员有非平凡的构造函数时, 这个union的默认构造将被删除 匿名的union对外是开放的, 因此放在类的声明中可以按照构造函数的不同而初始化为不同的类型, 此时类被称为枚举式的类

    2K20

    十三、异常、类型转换和 lambda

    这些异常类包括: std::logic_error:用于报告程序逻辑错误,如无效参数或无效操作。 std::runtime_error:用于报告运行时错误,如超出范围的数组访问。...异常规范 在 C++98 中,函数可以使用异常规范来声明它们可能抛出的异常类型。然而,从 C++11 开始,异常规范(除了 noexcept)被认为是弃用的,并在 C++17 中被彻底移除。...std::domain_error:当数学函数接收到一个无效参数时抛出(如,sqrt接收到一个负数)。它继承自std::logic_error。...std::invalid_argument:当函数接收到一个无效参数时抛出。它继承自std::logic_error。...std::range_error:当函数接收到一个无效范围时抛出(尽管在标准库中没有直接继承自std::range_error的常用异常,但它被用作一个基类)。

    7510

    第 18 章 用于大型程序的工具

    该表达式是类型,则相应的类必须还有一个可访问的析构函数和一个可访问的拷贝和移动构造函数。 该表达式是数组或函数类型,则表达式将会被转换为与之对应的指针类型。...搜寻匹配 catch语句过程中,寻找的是第一个与异常匹配的 catch语句,是按照其出现的顺序逐一进行匹配的,当程序使用具有继承关系的多个异常时,要注意令派生类异常的处理代码出现在基类异常的处理代码之前...构造函数在进入其函数体之前会首先执行初始值列表。因为在初始值列表抛出异常时,构造函数体内的 try块还未生效,所以构造函数体内的 catch语句无法处理构造函数初始值列表抛出的异常。...noexcept有两层含义:当跟在函数参数列表后面时它是异常说明符;而当作为 noexcept异常说明的 bool实参出现时,它是一个运算符,返回值是一个 bool类型的右值常量表达式,用于表示是否会抛出异常...在 C++11新标准中,允许派生类从它的一个或几个基类中继承构造函数,但是如果从多个基类中继承了相同的构造函数(即形参列表完全相同),则程序将产生错误。

    93020

    第 18 章 用于大型程序的工具

    该表达式是类型,则相应的类必须还有一个可访问的析构函数和一个可访问的拷贝和移动构造函数。 该表达式是数组或函数类型,则表达式将会被转换为与之对应的指针类型。...搜寻匹配 catch语句过程中,寻找的是第一个与异常匹配的 catch语句,是按照其出现的顺序逐一进行匹配的,当程序使用具有继承关系的多个异常时,要注意令派生类异常的处理代码出现在基类异常的处理代码之前...构造函数在进入其函数体之前会首先执行初始值列表。因为在初始值列表抛出异常时,构造函数体内的 try块还未生效,所以构造函数体内的 catch语句无法处理构造函数初始值列表抛出的异常。...noexcept有两层含义:当跟在函数参数列表后面时它是异常说明符;而当作为 noexcept异常说明的 bool实参出现时,它是一个运算符,返回值是一个 bool类型的右值常量表达式,用于表示是否会抛出异常...在 C++11新标准中,允许派生类从它的一个或几个基类中继承构造函数,但是如果从多个基类中继承了相同的构造函数(即形参列表完全相同),则程序将产生错误。

    99450

    两万字总结《C++ Primer》要点

    当多个文件出现了同名的const变量时,等同于在不同文件中分别定义了独立的变量。 如果想让const变量在文件间共享,则使用extern修饰。...P259 (3)委托构造函数 使用它所述类的其他构造函数执行它自己的初始化过程。 (4)如果去抑制构造函数定义的隐式转换? 在类内声明构造函数的时候使用explicit关键字。...(2)lambda表达式 lamba: lambda表达式表示一个可调用的代码单元。一个lambda具有一个返回类型、一个参数列表和一个函数体。...重载运算符包含返回类型、参数列表和函数体。 ::: tip 当一个重载的运算符是成员函数时,this绑定到左侧运算对象。成员运算符函数的显式参数数量比运算对象的数量少一个。...将一个实例化声明为extern就表示承诺在程序其他位置有该实例化的一个非extern声明(定义)。对于一个给定的实例化版本,可能有多个extern声明,但必须只有一个定义。

    2.1K30

    两万字总结《C++ Primer》要点

    当多个文件出现了同名的const变量时,等同于在不同文件中分别定义了独立的变量。 如果想让const变量在文件间共享,则使用extern修饰。...P259 (3)委托构造函数 使用它所述类的其他构造函数执行它自己的初始化过程。 (4)如果去抑制构造函数定义的隐式转换? 在类内声明构造函数的时候使用explicit关键字。...(2)lambda表达式 lamba: lambda表达式表示一个可调用的代码单元。一个lambda具有一个返回类型、一个参数列表和一个函数体。...重载运算符包含返回类型、参数列表和函数体。 ::: tip 当一个重载的运算符是成员函数时,this绑定到左侧运算对象。成员运算符函数的显式参数数量比运算对象的数量少一个。...将一个实例化声明为extern就表示承诺在程序其他位置有该实例化的一个非extern声明(定义)。对于一个给定的实例化版本,可能有多个extern声明,但必须只有一个定义。

    1.8K20

    Kotlin 1.2 新特性

    通过注解声明数组变量 自Kotlin1.2开始,系统允许通过注解声明数组参数,从而取代arrayOf函数的数组声明方式。...例如,当lambda表达式在构造一个对象时,允许将延迟初始化属性作为构造参数传过去。...弃用:vararg单个命名参数 为了与注释中的数组文字保持一致,在命名形式(foo(items = i))中传递可变参数的单个项目已被弃用。请使用具有相应数组工厂功能的扩展运算符。...但是,如果构造函数调用的参数中存在这样的表达式时,一些字节码处理工具不能很好地处理这些代码。...这可能会影响应用程序的整体性能;只有在多个类之间共享一些复杂的状态并在类初始化时更新时才使用它。

    1.7K100

    C++ 异常机制分析

    异常对象 异常对象是一种特殊的对象,编译器依据异常抛出表达式复制构造异常对象,这要求抛出异常表达式不能是一个不完全类型(一个类型在声明之后定义之前为一个不完全类型。...允许派生类到基类的类型转换。 数组被转换成指向数组(元素)类型的指针。 函数被转换成指向函数类型的指针。...定义变量a时调用了默认构造函数,使用a初始化异常变量时调用了复制构造函数,使用异常变量复制构造catch参数对象时同样调用了复制构造函数。...C++类构造函数初始化列表的异常机制,称为function-try block。...当异常抛出点所在函数无法解决异常时,异常对象沿着调用链被传递出去,程序的控制权也发生了转移。

    1.8K61

    Oracle Java类和对象

    两个构造函数都可以在Bicycle中声明,因为它们有不同的参数列表。与方法一样,Java平台根据列表中参数的数量及其类型来区分构造函数。...参数名称 当您向方法或构造函数声明参数时,您需要为该参数提供一个名称。此名称在方法体中用于引用传入的参数。 参数的名称在其范围内必须唯一。...在本例中,匿名类实现接口HelloWorld。 包含构造函数参数的括号,就像普通的类实例创建表达式一样。注意:当您实现一个接口时,没有构造函数,所以您使用一对空括号,如本例所示。...在这些情况下,您通常试图将功能作为参数传递给另一个方法,例如当有人单击按钮时应该采取什么操作。Lambda表达式使您能够做到这一点,将功能视为方法参数,或将代码视为数据。...因此,您只能在Java编译器可以确定目标类型的情况下使用lambda表达式: 变量声明 赋值 返回语句 数组初始化器 方法或构造函数参数 Lambda表达式体 条件表达式,?

    89200

    『Flutter开发实战』一小时掌握Dart语言

    备忘: 实例变量可以是 final 的但不可以是 const 的, final 实例变量必须在构造器开始前被初始化,比如在声明实例变量时初始化,或者作为构造器参数,或者将其置于构造器的 初始化列表中。...} 如果你在声明一个实例变量的时候就将其初始化(而不是在构造函数或其它方法中),那么该实例变量的值就会在对象实例创建的时候被设置,此过程早于执行构造函数以及它的初始化器列表。...调用父类非默认构造函数 默认情况下,子类的构造函数会调用父类的匿名无参数构造方法,并且该调用会在子类构造函数的函数体代码执行前,如果子类构造函数还有一个 初始化列表,那么该初始化列表会在调用父类的该构造函数之前被执行...,总的来说,这三者的调用顺序如下: 初始化列表 父类的无参数构造函数 当前类的构造函数 如果父类没有匿名无参数构造函数,那么子类必须调用父类的其中一个构造函数,为子类的构造函数指定一个父类的构造函数只需在构造函数体前使用...初始化列表 除了调用父类构造函数之外,还可以在构造函数体执行之前初始化实例变量。每个实例变量之间使用逗号分隔。

    5.1K10

    Julia(类型系统)

    传统上,类型系统分为两个截然不同的阵营:静态类型系统和动态类型系统,在静态类型系统中,每个程序表达式必须在执行程序之前具有可计算的类型;在动态类型系统中,直到运行时对类型的任何了解,直到实际值该程序可以操纵...复合类型是命名字段的集合,可以将其实例视为单个值。在许多语言中,复合类型是用户定义的唯一类型,并且它们也是迄今为止Julia中最常用的用户定义类型。...在确定是否使类型可变时,请问是否具有相同字段值的两个实例将被视为相同,或者是否可能需要随时间进行独立更改。如果将它们视为相同,则类型可能应该是不变的。...可以为复合类型定义自定义构造函数,这将在“ 构造函数”中详细讨论,但是在没有任何特殊构造函数声明的情况下,有两种创建新复合对象的默认方法,一种是显式给出类型参数另一种是在对象构造函数的参数中暗含它们。...,T当且仅当两个参数Point具有相同的类型时,类型才会明确隐含。

    5.5K10

    Spring认证中国教育管理中心-Spring Data MongoDB教程十三

    当 Spring Data 检测到具有参数默认值的构造函数时,如果数据存储不提供值(或简单地返回null),它就会使这些参数不存在,因此 Kotlin 可以应用参数默认值。...如果您有一个非零参数构造函数,其构造函数参数名称与文档的顶级字段名称匹配,则使用该构造函数。否则,将使用零参数构造函数。如果有多个非零参数构造函数,则会抛出异常。 18.2.1.....…)在 Java 类中被注释,它将尝试将值转换为声明的FieldType....否则MappingException将抛出 a 指示无法绑定给定的构造函数参数。...它们是在类级别而不是在单个属性上定义的。 复合索引对于提高涉及多个字段条件的查询的性能非常重要 这是一个lastName以升序和age降序创建复合索引的示例: 示例 185.

    2.8K20

    3小时Scala入门

    4,变量 Scala支持两种类型的变量,即常量val和变量var。 常量在程序中不可以被重新指向,变量可以被重新指向新的对象。 声明变量时可以指定类型,也可以由解释器根据初始值自动推断。 ?...(7)->用来指定映射Map中的键值关系。 (8)表达式的迭代器。 (9)下划线_在Scala中被用作占位符表示匿名函数参数或作为引入package的通配符。...注意当使用第(3)种方法scalac把代码编译时,脚本中必须要定义object单例对象。并且在object对象中实现main方法作为程序入口。 ?...函数的值是函数的参数和返回值的取值映射关系, 如 x => x+1 x,y => x+y 。 使用这种方式声明的函数叫做匿名函数。 此外,当函数表达式中引用了非参数的变量时,这种函数叫做闭包。...二十二,构造器 Scala的类包括一个主构造器和若干个(0个或多个)辅助构造器。 主构造器即定义类时传参并用来初始化对象属性的构造器,它是隐含的。

    1.6K30

    3小时Scala入门

    4,变量 Scala支持两种类型的变量,即常量val和变量var。 常量在程序中不可以被重新指向,变量可以被重新指向新的对象。 声明变量时可以指定类型,也可以由解释器根据初始值自动推断。 ?...(7)->用来指定映射Map中的键值关系。 (8)表达式的迭代器。 (9)下划线_在Scala中被用作占位符表示匿名函数参数或作为引入package的通配符。...注意当使用第(3)种方法scalac把代码编译时,脚本中必须要定义object单例对象。并且在object对象中实现main方法作为程序入口。 ?...函数的值是函数的参数和返回值的取值映射关系, 如 x => x+1 x,y => x+y 。 使用这种方式声明的函数叫做匿名函数。 此外,当函数表达式中引用了非参数的变量时,这种函数叫做闭包。...二十二,构造器 Scala的类包括一个主构造器和若干个(0个或多个)辅助构造器。 主构造器即定义类时传参并用来初始化对象属性的构造器,它是隐含的。

    3.5K20
    领券