title: what is this error mean when convert from java code with generic to kotlin, single ban after the T?
body: <p>trying to convert some java code to kotlin, and having problem with the ones with generic type.</p>
  
  <p>one sample here is the java code from Danny Preussler’s post Of Bundles and ViewModels:
  <a href="https://proandroiddev.com/customizing-the-new-viewmodel-cf28b8a7c5fc" rel="nofollow noreferrer">here</a></p>
  
  <pre><code>class BundleAwareViewModelFactory&lt;T extends ParcelableViewModel&gt; implements ViewModelProvider.Factory {
      private final Bundle bundle;
      private final ViewModelProvider.Factory provider;
      public BundleAwareViewModelFactory(@Nullable Bundle bundle,
                                     ViewModelProvider.Factory provider) {
          this.bundle = bundle;
          this.provider = provider;
      }
      @SuppressWarnings("unchecked")
      @Override
      public T create(final Class modelClass) {
          T viewModel = (T) provider.create(modelClass);
          if (bundle != null) {
              viewModel.readFrom(bundle);
          }
          return viewModel;
      }
  }
  
  public abstract class ParcelableViewModel extends ViewModel {
  
      public abstract void writeTo(@NonNull Bundle bundle);
      public abstract void readFrom(@NonNull Bundle bundle);
  }
  </code></pre>
  
  <p>trying to convert the code snippet into kotlin code, not be able do it right so using the android studio IDE to do it and get this result, still it shows compiler error:</p>
  
  <p>Error:(24, 1) Class 'BundleAwareViewModelFactory' must be declared abstract or implement abstract member public abstract fun  create(p0: Class!): T! defined in android.arch.lifecycle.ViewModelProvider.Factory</p>
  
  <p>Error:(28, 34) Type parameter bound for T in fun  create(p0: Class!): T!
   is not satisfied: inferred type CapturedTypeConstructor(*) is not a subtype of ViewModel!</p>
  
  <pre><code>class BundleAwareViewModelFactory&lt;T : ParcelableViewModel&gt;(@param:Nullable private val bundle: Bundle?, 
                                                                  private val provider: ViewModelProvider.Factory) : 
          ViewModelProvider.Factory {
      override fun create(modelClass: Class&lt;*&gt;): T {
          val viewModel = provider.create(modelClass) as T
          if (bundle != null) {
              viewModel.readFrom(bundle)
          }
          return viewModel
      }
  }
  
  abstract class ParcelableViewModel : ViewModel() {
  
      abstract fun writeTo(bundle: Bundle)
      abstract fun readFrom(bundle: Bundle)
  }
  </code></pre>
  
  <p>what does the single ban T! mean?
  what does the error means or how those generic to be presented in the kotlin, or any post talks about the generic in kotlin?</p>