N Sharma
N Sharma

Reputation: 34497

How to access instance variable in static companion object in Kotlin

I am trying to make utils for performing network operations in kotlin. I have below code where the primary constructor is taking Command and Context.

I am unable to access command variable in command.execute(JSONObject(jsonObj)), getting below error. I am not sure what is causing an issue?

Unresolved reference: command

class AsyncService(val command: Command, val context: Context) {

    companion object {
        fun doGet(request: String) {
            doAsync {
                val jsonObj = java.net.URL(request).readText()
                command.execute(JSONObject(jsonObj))
            }
        }
    }
}

Upvotes: 8

Views: 6743

Answers (2)

AlexTa
AlexTa

Reputation: 5251

You should pass arguments directly to your companion object function:

class AsyncService {

    companion object {
        fun doGet(command: Command, context: Context, request: String) {
            doAsync {
                val jsonObj = java.net.URL(request).readText()
                command.execute(JSONObject(jsonObj))
            }
        }
    }
}

Upvotes: 4

nhaarman
nhaarman

Reputation: 100398

A companion object is not part of an instance of a class. You can't access members from a companion object, just like in Java you can't access members from a static method.

Instead, don't use a companion object:

class AsyncService(val command: Command, val context: Context) {

    fun doGet(request: String) {
        doAsync {
            val jsonObj = java.net.URL(request).readText()
            command.execute(JSONObject(jsonObj))
        }
    }
}

Upvotes: 8

Related Questions