aniruddha dhamal
07/10/2021, 12:41 AMinterface DataProvider<T> {
fun provideData(t:T): Data
}
class TaxDataProvider: DataProvider<Tax> {
override fun provideData(t: Tax): Data {
return Data()
}
}
class Provider {
fun register(dataProvider: DataProvider<*>) {
dataProvider.provideData(Tax()) //Not able to call this. Getting error: Type mismatch Required Nothing. Found Tax
}
}
Is there any way to achieve this? I wanted to keep register method to accept type of DataProvider not specific type (TaxDataProvider).Dave K
07/10/2021, 1:29 AMDave K
07/10/2021, 1:35 AMfun <T> register(DataProvider: DataProvider<T>, inputFunc: () -> T)
Then you’d be able to
DataProvider.provideData(inputFunc())
To get an instance of T that is compatible with your DataProvideraniruddha dhamal
07/10/2021, 2:00 AMNir
07/10/2021, 3:37 AMNir
07/10/2021, 3:37 AMNir
07/10/2021, 3:38 AManiruddha dhamal
07/10/2021, 3:50 AMNir
07/10/2021, 3:57 AMNir
07/10/2021, 3:58 AMNir
07/10/2021, 3:58 AMMatteo Mirk
07/13/2021, 10:30 AMval providers = mutableListOf<DataProvider<*>>()
then you can store your object
fun <T> register(dataProvider: DataProvider<T>, inputFunc: () -> T) {
providers.add(dataProvider) // OK
dataProvider.provideData(inputFunc())
}