2017-05-12 2 views
0

Ich bin etwas neu zu Kotlin und ich versuche, einen Wert zu injizieren (in diesem Beispiel ist es nur ein Int, aber im realen Code ist es eine Provider-Klasse) Was mache ich falsch hier? und warum ist x eine ungelöste Referenz?Inject-Konstruktor und Companion-Objekt

class Test 
@Inject constructor(private val x: Int) { 

companion object { 
    var y: Int = 0 

     @BeforeClass @JvmStatic 
     fun beforeClass() { 
      y = x * 2 
     } 
    } 
} 

Antwort

2

Ein Begleiter-Objekt ist ein statisches Objekt im Zusammenhang mit einer Klasse, nicht mit einer Instanz einer Klasse.

class Foo(val bar: Baz) { 
    companion object {} 
} 

ähnelt den folgenden Code in Java:

class Foo { 
    static class Companion { } 
    static final Foo.Companion Companion = new Foo.Companion(); 

    final Baz bar; 
    Foo(Baz bar) { this.bar = bar; } 
} 

Aus diesem Grund x ist nicht in dem Variablenbereich des Begleitobjekts, so wie du nicht das bar Feld aus der statischen Klasse zugreifen Companion. Ihre Immobilie y ist eigentlich ein Feld in der Test.Companion Klasse.

Ich bin mir nicht sicher, was Sie mit der BeforeClass Sache zu tun versuchen, da ich nicht damit vertraut bin. Hoffe, meine Antwort hilft trotzdem.