Search code examples
androidkotlin

Is instantiating an acceptable way to call methods from other classes?


I'm a new Kotlin dev switched from Java. I have many Helper/Util classes in my project which can have up to 20 methods in some. In Java I used to set the functions as public static and I understand that companion object works the same way in Kotlin.

However I find that calling the methods using instantiate is similarly easy to manage and I don't have to place the methods in companion object. I recently realised that using this way all the time might be risky performance wise(?) and thought it'd be good to ask here. So is instantiating an acceptable way to call methods from other classes?

ConversionHelper

class ConversionHelper {
    fun convertTemperature(value: Int) {
       //code...
    }

    fun convertPressure(value: Int) {
       //code...
    }
}

SomeActivity

class SomeActivity : AppCompatActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
      //code...

      val tempValue = 26
      val pressureValue = 300

      val displayTemperature = ConversionHelper().convertTemperature(tempValue)
      val displayPressure = ConversionHelper().convertPressure(pressureValue)
   }
}

In my search for this answer, I learned that declaring the Helper/Util classes as Object is a good way to do this as well so I'll be considering it. But for other classes is above an acceptable way to go about it?


Solution

  • That is ugly, obtuse code. It does affect performance, but not significantly unless you're doing it inside a big loop iteration.

    You can simply create object classes. No need for companion objects if your utility functions aren't associated with a class you actually need to create instances of.

    object ConversionHelper {
        fun convertTemperature(value: Int) {
           //code...
        }
    
        fun convertPressure(value: Int) {
           //code...
        }
    }
    

    Even if object classes didn't exist, it would be far preferable to use companion objects over forcing a useless class to be instantiated just to call a helper function. That is basically forcing you to write code that looks like nonsense.