Kotlin内部类无法在外部访问私有方法?

3

你好,我是一个新手,正在尝试从内部匿名类中调用一个私有函数。

以下是调用代码:

      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)
    }

这两段代码都位于一个Fragment类中,但在onResponse方法中无法访问displaySuccess方法?

你是否遇到任何错误?我认为可以从匿名类访问私有函数。 - Bob
在displaySuccess()行下面它说未解析的引用。 - Jono
2个回答

4

使用 object 你创建了一个单例,但是它不知道如何在外部访问该类。你应该将其定义为一个类并进行实例化。


好的。但我需要创建这个对象并将其作为参数传递。这是一个接口,我需要将其传递到另一个函数中。换句话说,这是一个回调。 - Jono
是的,但你应该将它定义为 class MyCallback : Callback<ResponseBody>,然后创建它为 MyCallback()(注意没有 new 关键字,替换了对 callback 对象的引用)。这意味着你为每个调用创建一个对象,而不是使用单例。 - Xavier Rubio Jansana
换句话说,你正在使用单例模式(请参见此处 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 的匿名类。 - Xavier Rubio Jansana

2
你必须像这样声明对象:
val callback = object: Callback<ResponseBody> {
    override fun onResponse(call: Call<ResponseBody>?, response: Response<ResponseBody>?) {
        //implementation
    }
    override fun onFailure(call: Call<ResponseBody>?, t: Throwable?) {
        //implementation
    }
}

你正在使用的是对象声明。要创建一个匿名类的对象,你必须使用对象表达式。它们的语法略有不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接