Search code examples
androidkoin

Cannot use 'VM' as reified type parameter. Use a class instead


So previously this code was working fine (2.0.1).

abstract class ActivityBaseViewModel<out VM : ViewModel>(clazz: KClass<VM>) : AppCompatActivity() {

    protected val viewModel: VM by viewModel(clazz)

Then I updated Koin to 2.2.2 and now it can't compile this code:

Cannot use 'VM' as reified type parameter. Use a class instead.

enter image description here


Solution

  • Seems there is no alternative function like this anymore.

    So another solution would be like this:

    base view model activity (or fragment)

    abstract class ActivityBaseViewModel<out VM : ViewModel> : AppCompatActivity() {
    
        protected abstract val viewModel: VM
    
        ...
    }
    

    and then in a specific activity (or fragment):

    class MainActivity : ActivityBaseViewModel<MainActivityViewModel>() {
    
        override val viewModel: MainActivityViewModel by viewModel()
        
        ...
    }