gpt4 book ai didi

kotlin - Kotlin中的内联构造函数是什么?

转载 作者:行者123 更新时间:2023-12-03 16:08:15 24 4
gpt4 key购买 nike

首先,我必须澄清一下,我不是在问什么是内联函数或什么是内联类。
Kotlin语言文档或规范中没有任何地方可以引用内联构造函数,但是如果您查看 Arrays.kt 源代码,则会看到此类: ByteArray 具有内联构造函数:

/**
* An array of bytes. When targeting the JVM, instances of this class are represented as `byte[]`.
* @constructor Creates a new array of the specified [size], with all elements initialized to zero.
*/
public class ByteArray(size: Int) {
/**
* Creates a new array of the specified [size], where each element is calculated by calling the specified
* [init] function.
*
* The function [init] is called for each array element sequentially starting from the first one.
* It should return the value for an array element given its index.
*/
public inline constructor(size: Int, init: (Int) -> Byte)
让我们考虑我们要创建一个类似的类,如下所示:
    public class Student(name: String) {
public inline constructor(name: String, age: Int) : this(name)
}
如果您尝试在Kotlin中创建该类并为其编写内联构造函数,则会发现这是不可能的,IDE会引用此错误:

Modifier 'inline' is not applicable to 'constructor'


因此,让我们回顾一下, ByteArray定义如何正确?

最佳答案

您正在查看的ByteArray声明不是真实的,而是所谓的内置类型。该声明是为了方便起见而存在的,但从未真正编译为二进制文件。 (实际上,在JVM上,数组是特殊的,并且在任何地方都没有对应的类文件。)
该构造函数被标记为内联,因为在实践中,编译器会发出与每个调用站点的主体相对应的代码。所有的调用站点检查都相应地完成(对lambda参数的处理方式使编译器知道它会倾斜)。
构造函数inlining对于用户类是不可能的,因此在用户代码中禁止inline修饰符。

关于kotlin - Kotlin中的内联构造函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67373964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com