# Kotlin version of Java's getInstance()

**URL:** <https://discuss.kotlinlang.org/t/kotlin-version-of-javas-getinstance/7212>\
**Category:** Android\
**Created:** [March 27, 2018, 5:02pm UTC](https://discuss.kotlinlang.org/t/kotlin-version-of-javas-getinstance/7212 "2018-03-27T17:02:08Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![dawidos00952](https://avatars.discourse-cdn.com/v4/letter/d/ce7236/32.png) [@dawidos00952](https://discuss.kotlinlang.org/u/dawidos00952)\
**Post date:** [March 27, 2018, 5:02pm UTC](https://discuss.kotlinlang.org/t/kotlin-version-of-javas-getinstance/7212/1 "2018-03-27T17:02:08Z")

</div>

So recently I’ve been using Android Architecture Components. In some example inside ViewModel we need to have a singleton of LiveData object (locationData). What is the proper way to do this in Kotlin. I also need to pass context to this this singleton.

```
class LocationViewModel extends ViewModel {
    private LiveData<Location> locationData = null;
 
    LiveData<Location> getLocation(Context context) {
        if (locationData == null) {
            locationData = new MyLocationListener(context);
        }
        return locationData;
    }
}

```

That’s my dummy implementation:

```
class LocationViewModel: ViewModel() {
    lateinit var locationData: MyLocationListener

    fun getLocation(context: Context): MyLocationListener {
        locationData = MyLocationListener(context)
        return locationData
    }

```

---

<div class="post-metadata">

**Author:** ![tieskedh](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.kotlinlang.org/tieskedh/32/2816_2.png) [@tieskedh](https://discuss.kotlinlang.org/u/tieskedh)\
**Post date:** [March 28, 2018, 10:25am UTC](https://discuss.kotlinlang.org/t/kotlin-version-of-javas-getinstance/7212/2 "2018-03-28T10:25:10Z")

</div>

I would do it like this:

```
  class LocationViewModel: ViewModel(){
    var locationData: MyLocationListener? = null
        fun getLocation(context: Context) = locationData ? : synchronized(this) {
           MyLocationListener(context).also{
                locationData = it
            }
       }
} 

```

. I found this implementation online [Kotlin singletons with argument. object has its limits | by Christophe Beyls | Medium](https://medium.com/@BladeCoder/kotlin-singletons-with-argument-194ef06edd9e)
