Как вернуть синглтон из функции геттера с помощью Koin - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть следующий класс CurrentWeatherResponse, который содержит поле location, которое использует метод получения для возврата экземпляра WeatherLocation() с использованием параметров конструктора класса. Как бы я go убедился, что этот геттер всегда будет возвращать синглтон класса WeatherLocation с использованием Koin в файле модуля?

data class CurrentWeatherResponse(
    // Tells GSON that the "currently" field of the JSON returned by the
    // API should be tied with our CurrentWeatherEntry data class
    @SerializedName("currently")
    val currentWeatherEntry: CurrentWeatherEntry,
    val latitude:Double,
    val longitude:Double,
    val timezone:String
) {
    val location:WeatherLocation
        get() = WeatherLocation(latitude,longitude,timezone,currentWeatherEntry.time)
}

1 Ответ

1 голос
/ 18 апреля 2020

Попробуйте использовать делегатов. Это простой класс:

class ReadOnlyDelegate<R, T>(val t:T) : ReadOnlyProperty<R, T> {
    override fun getValue(thisRef: R, property: KProperty<*>) = t
}

Используйте его следующим образом:

data class CurrentWeatherResponse(
    // Tells GSON that the "currently" field of the JSON returned by the
    // API should be tied with our CurrentWeatherEntry data class
    @SerializedName("currently")
    val currentWeatherEntry: CurrentWeatherEntry,
    val latitude:Double,
    val longitude:Double,
    val timezone:String) {

    val location:WeatherLocation by ReadOnlyDelegate(WeatherLocation(latitude, longitude, timezone, currentWeatherEntry.time))
}
...