Android Kotlin Dagger2 предоставляет gson: Параметр, указанный как непустой, равен null

Я хочу предоставить один экземпляр gson, поэтому я предоставляю его в своем NetworkModule, когда я создаю retrofit api, gson не является нулевым, но когда я использую экземпляр gson в классе доопределения, он имеет значение null.

@Module class NetworkModule { @Provides @Singleton fun provideGson(): Gson { return Gson() } @Provides @Singleton fun provideMyEnterpriseApi(gson: Gson): MyEnterpriseApi { //HERE GSON IS NOT NULL return RetrofitMyEnterpriseApi(BuildConfig.API_MYENTERPRISE_URL, BuildConfig.API_MYENTERPRISE_CONNECTION_TIMEOUT, BuildConfig.API_MYENTERPRISE_READ_TIMEOUT, gson) } } 

Мой модифицированный класс api:

 class RetrofitMyEnterpriseApi(baseUrl: String, connectTimeout: Long, readTimeout: Long, private val gson: Gson) : RetrofitApi<RetrofitMyEnterpriseCalls>(baseUrl, connectTimeout, readTimeout, RetrofitMyEnterpriseCalls::class.java) { override fun buildRetrofit(baseUrl: String, connectTimeout: Long, readTimeout: Long): Retrofit { val builder = Retrofit.Builder() builder.baseUrl(baseUrl) builder.client(buildClient(connectTimeout, readTimeout)) builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create()) builder.addConverterFactory(GsonConverterFactory.create(gson)) return builder.build() } private fun buildClient(connectTimeout: Long, readTimeout: Long): OkHttpClient { //HERE GSON IS NULL return OkHttpClient.Builder() .addInterceptor(OAuth2Interceptor(gson, this)) .addInterceptor(LoggingInterceptor.newInstance()) .connectTimeout(connectTimeout, TimeUnit.MILLISECONDS) .readTimeout(readTimeout, TimeUnit.MILLISECONDS) .build() } } 

Класс RetrofitApi:

 abstract class RetrofitApi<C> (baseUrl: String, connectTimeout: Long, readTimeout: Long, callsClass: Class<C>) { protected val calls: C init { val retrofit = buildRetrofit(baseUrl, connectTimeout, readTimeout) calls = retrofit.create(callsClass) } protected abstract fun buildRetrofit(baseUrl: String, connectTimeout: Long, readTimeout: Long): Retrofit } 

Поэтому, когда я предоставляю, что это не null, но когда я использую его в методе buildClient, это null, я не понимаю, почему, возможно, я что-то пропустил в Котлине.

Я нашел ответ, когда я опубликовал \ o /

Таким образом, проблемой было поле gson в классе RetrofitMyEnterpriseApi, установленном после инициализации родительского класса RetrofitApi, я думаю, что это странно, потому что я передаю его в параметрах, но ..

Мне просто нужно вызвать метод buildRetrofit после инициализации класса RetrofitMyEnterpriseApi или отправить экземпляр gson в родительский класс.