如何避免将抽象 class 向下转换为子 class?

How to avoid downcasting of abstract class to child class?

我的 android 应用程序中有以下结构:

    abstract class BaseActivity extends AppCompatActivity{
        protected BaseViewModel mViewModel;
    }
    abstract class BaseViewModel extends ViewModel { ... }
    class MainActivityViewModel extends BaseViewModel { ... }
    class MainActivity extends BaseActivity{ ... }

现在在 MainActivity 中初始化 BaseViewModel 时,我想将类型作为泛型输入,这样我就不必每次都将其转换为子实现 ((MainActivityViewModel)mViewModel),我已经阅读了泛型自打字,但不明白在这种情况下这是如何工作的。

如果你想 protected BaseViewModel mViewModel; 有一个通用类型,你应该 重写你 class 如下:

public abstract class BaseActivity<T> extends AppCompatActivity{
        protected T mViewModel;
    }

 public class MainActivity extends BaseActivity<MainActivityViewModel >{ ... }

希望我回答了你的问题。如果我不知道,你是否应该再解释一下?