[Inject] and @Inject


#1

I can't get a new style constructor annotation to compile:

public class Foo [Inject] () {  // compiles

public class Foo @Inject () { // "Error:(9, 28) Kotlin: Expecting 'constructor' keyword")


#2

Hey,

adding the constructor keyword solves this problem:

public class Foo @Inject constructor() {}

This keyword is also useful to encapsulate the primary constructor behind a private keyword

public class Foo private constructor() {}

Reference:

“If you need to annotate the primary constructor of a class, you need to add the constructor keyword to the constructor declaration, and add the annotations before it”, http://kotlinlang.org/docs/reference/annotations.html#usage

More:


#3

Indeed, but isn't the asymmetry between @Inject and [Inject] a bug?


#4

No, it isn't. The old deprecated syntax with "[...]" works as it used to, the new syntax with "@" requires "constructor" as it's supposed to.