2017-08-17 10 views
2

こんにちは、私はkotlinを初めて使っていて、内部の匿名クラスの内部からプライベート関数を呼び出そうとしています。以下kotlin内部クラスはプライベートメソッドの外部にアクセスできませんか?

コールである:

 object callback : Callback<ResponseBody> { 
     override fun onResponse(call: Call<ResponseBody>?, response: Response<ResponseBody>?) { 

      Log.d("jjj", " response is " + response.toString()) 
      displaySuccess() 

     } 

     override fun onFailure(call: Call<ResponseBody>?, t: Throwable?) { 
     } 

    } 



     private fun displaySuccess(){ 
     Toast.makeText(activity,"succesful", Toast.LENGTH_LONG) 
    } 

両方これらのコードスニペットは、フラグメントクラスに常駐しdisplaySuccessがonResponse内部にアクセスするカント?

+0

エラーが発生していますか?私は匿名クラスからプライベート関数にアクセスすることが可能だと思います。 – Bob

+0

displaySuccess()行の未解決の参照があります。 – jonney

答えて

4

objectを使用すると、シングルトンが作成されます。シングルトンは、外部のクラスへのアクセス方法がわかりません。これをクラスとして定義してインスタンス化する必要があります。

+0

O okです。しかし、私はこのオブジェクトを作成し、それをパラメータとして渡す必要があります。私は別の関数に渡す必要があるそのインターフェイス。言い換えれば、コールバック – jonney

+0

はい、それは 'class MyCallback:Callback 'として定義し、 'MyCallback()'として作成する必要があります( 'new'キーワードに気付かず、' callback'オブジェクトへの参照を置き換えます)。これは、シングルトンを使用する代わりに、呼び出しごとにオブジェクトを作成することを意味します。 –

+0

つまり、使用しているのはシングルトンです(https://kotlinlang.org/docs/reference/object-declarations.html#object-declarationsまたはhttps://antonioleiva.com/objects-kotlin/を参照)あなたが必要とするものは、私があなたのことを記述したものか、https://kotlinlang.org/docs/reference/object-declarations.html#object-expressionsです。これは、Javaの匿名クラスと同等です。 –

2

あなたはこのようなオブジェクトを宣言する必要があります:あなたが使用されている1つがobject declarationある

val callback = object: Callback<ResponseBody> { 
    override fun onResponse(call: Call<ResponseBody>?, response: Response<ResponseBody>?) { 
     //implementation 
    } 
    override fun onFailure(call: Call<ResponseBody>?, t: Throwable?) { 
     //implementation 
    } 
} 

を。匿名クラスのオブジェクトを作成するには、代わりにobject expressionを使用する必要があります。その構文は少し異なります。

関連する問題