型推論は失敗しません。あなたのメソッドシグネチャは、あなたが求めているT
(BaseViewModel
)のどれに対してでもClass<T>
を返すことができると言います。として
activity.bindViewModel<SomeRandomModel>()
と返す必要がありますClass<SomeRandomModel>
を返します。 ArchViewModel::class.java
はClass<SomeRandomModel>
ではないため、実装が正しくありません。
KotlinでもJavaでも正確に実装することは実際には不可能です。 return ArchViewModel.class
がJavaでコンパイルされている場合は、ロータイプBaseViewModel
を使用しているため、コンパイラーは型チェックをやめ、エラーを報告しません。
だから、はを実装するようにメソッドを修正する必要があります。どのように、あなたが実際にそれから欲しいものに依存します。
また、return ArchViewModel::class.java as Class<T>
をキャストして「修正」することもできます。コンパイラは、このキャストが安全でないことを正しく警告します。