0

I have the following code:

class Camera : AsyncActiveInputDevice<Image> { constructor(inputListener: ((Image) -> Unit)? = null) { this.inputListener = inputListener } override var inputListener: ((Image) -> Unit)? set(value) { field = value TODO("call C/Python implementation") } } 

And IntelliJ IDEA is suggesting converting the constructor to a primary constructor.

So how to convert this? How to init a property with a setter in a primary constructor? I have tried init blocks but it then shows an error: "Variable can not be initialized before declaration".

0

2 Answers 2

2

Such a primary constructor would go in the header of the class, like this:

class Camera(inputListener: ((Image) -> Unit)? = null) : AsyncActiveInputDevice<Image> { override var inputListener: ((Image) -> Unit)? = inputListener set(value) { field = value TODO("call C/Python implementation") } } 

You can get this conversion done by the IDE by invoking intention actions on the warning (Alt + Enter on Windows, ⌥↩ on macOS), and choosing Convert to primary constructor.

Sign up to request clarification or add additional context in comments.

1 Comment

Expanding on this: Custom getters and setters aren't supported in the primary constructor because there wasn't/isn't a good syntax to implement the feature with
2

The init block must come after the variale declaration. That's what the error message is telling you:

class Camera(inputListener: ((Image) -> Unit)? = null): AsyncActiveInputDevice<Image> { override var inputListener: ((Image) -> Unit)? = inputListener set(value) { field = value TODO("call C/Python implementation") } init { this.inputListener = inputListener } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.