2017-01-25 11 views
5

私はちょうど以下、SingleKotlin.instanceは、私はJavaからSingleKotlin.instanceを呼び出すしようとすると、しかし、それは記号「インスタンス」を解決することはできませんを示し、他のKotlinファイルKotlin:JavaはKotlin Symbolを解決できませんか?

class SingleKotlin private constructor(){ 
    companion object { 
     val instance by lazy { 
      SingleKotlin() 
     } 
    } 

} 

によって呼び出すことができるようにKotlinコードをお持ち

私はなぜ誰かがexplianでき、この問題をどうやって解決できるのか分かりません。 (このドキュメントhttps://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#static-fieldsに言ったように)

答えて

4

がちょうどそう、フィールド上

を@JvmStatic注釈を追加し、あなたのコードは次のようにする必要があります:

class SingleKotlin private constructor(){ 
    companion object { 
     @JvmStatic 
     val instance by lazy { 
      SingleKotlin() 
     } 
    } 
} 

そして今、あなたは

SingleKotlin.instance 
のようにそれを呼び出すことができます
+0

感謝を@JvmStaticアノテーションを使用することができます答えますYurii Kyrylchukの答えは、@ JvmFieldをJavaコードに追加した後、 "SingleKotlin.getInstance()"を使用する必要があります。 – user3239558

+1

'@ JvmField'はできませんしかし、@ JvmStatic'は委譲されたプロパティに適用されます。そのプロパティのゲッターを包含クラスの静的スコープで公開するので、そのゲッターを 'SingleKotlin.getInstance() 'と呼びます。 – Ilya

+1

@JvmStaticを追加した後、私は間違いを犯しました。私はSingleKotlinを使用します。 getInstance() " – user3239558

3

@YuriiKyrylchukの回答に加えて:別のオプション(そしてKotlinコードを制御できない場合の唯一のオプション)はを参照することですJavaから。例:

class MyClass { 
    companion object { 
     val x: Int = 0 
    } 
} 

とJavaで:

MyClass.Companion.getX(); 
3

あなたSingleKotlinオブジェクトは、パラメーターを指定せずに単一のプライベートコンストラクタを持っている場合は、代わりにobjectを使用することができます。

object SingleKotlin { 
    // some members of SingleKotlin 
    val x = 42 
} 

は、次にJavaで、あなたは参照しますそれはINSTANCE静的フィールドを通じて:

あなたはこのように、Javaからメソッドを呼び出す必要が
0

:イリヤに追加で
AppUIUtils.Companion.yourMethod()

0

は、Java

に続いて

object SingleKotlin { 
    // some members of SingleKotlin 

    @JvmStatic val x = 42 
} 

SingleKotlin.getX();