Kotlin中AsyncTask的子类 – 无法在onPostExecute中使用主构造函数参数

我有一个在Kotlin中实现的AsyncTask的子类:

 class SignUpTask(responseHandler: SignUpTaskResponseHandler): AsyncTask<Agent, Void, Boolean>() { override fun doInBackground(vararg params: Agent?): Boolean { // Some awesome code return true } override fun onPostExecute(result: Boolean?) { result?.let { if (it) { responseHandler.agentCreationSucceeded() } else { // agent creation failed } } } } 

问题是 – 我在这条线上得到错误responseHandler.agentCreationSucceeded()

未解决的引用:responseHandler

我可以通过显式声明一个属性并将其赋值给构造函数中传递的参数来使其工作:

 class SignUpTask(responseHandler: SignUpTaskResponseHandler): AsyncTask<Agent, Void, Boolean>() { val internalResponseHandler = responseHandler // explicit assignment to make it work inside onPostExecute override fun doInBackground(vararg params: Agent?): Boolean { // Some awesome code return true } override fun onPostExecute(result: Boolean?) { result?.let { if (it) { // Works only after explicit assignment? internalResponseHandler.agentCreationSucceeded() } else { // agent creation failed } } } } 

任何想法,为什么这个开销或我错过了什么在这里?

你能试试吗?

 class SignUpTask(val responseHandler: SignUpTaskResponseHandler): AsyncTask<Agent, Void, Boolean>() { override fun doInBackground(vararg params: Agent?): Boolean { // Some awesome code return true } override fun onPostExecute(result: Boolean?) { result?.let { if (it) { // Works only after explicit assignment? responseHandler.agentCreationSucceeded() } else { // agent creation failed } } } } 

原因是变量范围。 responseHandler : SignUpTaskResponseHandler只在类的构造函数中定义。 如果将其指定为val变量,则将其定义为类属性。