Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 553 Vote(s) - 3.46 Average
  • 1
  • 2
  • 3
  • 4
  • 5
What's an inline constructor in Kotlin?

#1
First of all, I have to clarify I'm not asking what's an inline function is or what's an inline class is.
There's nowhere in Kotlin Language documentation or specification any reference to an inline constructor but if you look in [`Arrays.kt`][1] source you see this class: [`ByteArray`][2] has an inline constructor:

```kotlin
/**
* 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)
```

Let's consider we want to create a similar class, something like this:
```kotlin
public class Student(name: String) {
public inline constructor(name: String, age: Int) : this(name)
}
```

If you try to create that class in Kotlin and write an inline constructor for it you see that it's impossible and IDE refers to this error:

> Modifier 'inline' is not applicable to 'constructor'

So let's recap, how `ByteArray` definition is correct?

[1]:

[To see links please register here]

[2]:

[To see links please register here]

Reply

#2
The `ByteArray` declaration you are looking at is not real, it’s a so called built-in type. This declaration exists for convenience, but is never truly compiled to a binary. (Indeed, on the JVM, arrays are special and don’t have corresponding class files anywhere.)

This constructor is marked inline because in practice the compiler emits the code corresponding to what would be its body at every call site. All the call-site checking is done accordingly (the lambda argument is treated in such a way that the compiler knows it’s going to be inclined).

Constructor inlining is not possible for user classes, so the `inline` modifier is prohibited in user code.
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through