gpt4 book ai didi

Java 缺乏模板继承导致了 Android 中主要的代码重复问题。任何解决方案?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:17:46 25 4
gpt4 key购买 nike

这是 Android 特有的。

我在 Android 中的所有 Activity 都派生自一个自定义类,该类提供了一个漂亮、干净的地方来放置应用程序中所有布局使用的通用代码,尤其是一些将布局注入(inject)我的布局的通用 setContentView() 覆盖代码。所以这是一个典型的层次结构:

MyActivity extends MyBaseClass -> MyBaseClass extends Activity -> Activity

我的一个应用程序需要 Google map 支持。所以我试图将 MyBaseClass 变成一个模板/泛型,这样我就可以做类似的事情:

MyActivity extends MyBaseClass<MapActivity> -> MyBaseClass<T> extends T -> T

当然,编译失败是因为 Java 模板/泛型不如我在尝试后不久发现的 C++ 模板有用。所以我最终创建了一个完整的独立类作为临时解决方法:

MyActivity extends MyBaseMapClass -> MyBaseMapClass extends MapActivity -> MapActivity

并将所有代码从 MyBaseClass 复制到 MyBaseMapClass 中。除了一些涉及导入的小改动外,代码是相同的。它有效,但它不是一个好的解决方案。

我祈祷以上内容将是问题的终结,我再也不必重新审视它了。

不幸的是,我开始尝试将 fragment 和 Activity 与更复杂的基类混合使用,上面的代码重复问题正成为一个严重的问题。每当我对一个文件进行更改时,我都必须记住将其克隆到其他文件中,而且开发速度很快,我很快就会失去同步。

Activity、MapActivity、FragmentActivity、ListActivity、PreferenceActivity 等。我是否需要为我希望使用的每一个创建一个单独的派生类?我希望不会,并且出于这个原因,我已经开始限制我的推导(我的一些 Activity 因此没有某些特征)。我有时使用两个单独的基类(其中一些 Activity 需要将更多 View 扩展到布局中,但并非所有 Activity 都需要这样做)这一事实进一步加剧了这个问题:

MyActivity extends MyBaseClass -> MyBaseClass extends Activity -> Activity

MyActivity2 extends AnotherBaseClass -> AnotherBaseClass extends MyBaseClass -> MyBaseClass extends Activity -> Activity

如果我想在 Maps 中使用 AnotherBaseClass 的代码,我不仅要创建 MyBaseMapClass,还要创建 AnotherBaseMapClass 并复制代码。此时我最多有四个类,其中两个类是几千行克隆代码。重复的代码让我很困扰,因为它使维护和开发变得更加困难。

派生 Android 类会带来复杂性,例如 findViewById() 是 Activity 基类的一部分。这很重要,因为我不确定如何在不遇到我刚才描述的相同问题的情况下编写接口(interface)或组合。

这里有人遇到过这个问题并提出了可行的解决方案吗?

最佳答案

为什么不创建一个带有静态函数的辅助类,如 styleActivity(Activity a)?在这种情况下,这似乎是比使用继承更简单的解决方案。

关于Java 缺乏模板继承导致了 Android 中主要的代码重复问题。任何解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13167394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com