- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是 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/
我不明白为什么我的 Java 代码没有出现错误。我有一个使用泛型类型的类: import java.util.*; // For ArrayList public class Hat { pub
我正在 Pygame 中开发一款射击类游戏供我自己娱乐,在创建玩家的基本 Action 的过程中我遇到了一些疑问,“Dash”和“Switch”均未按预期工作。 ... def switch(self
当我加载一个显示的网页时,为什么我要为每个图像的 HTTP 请求打开一个新的 TCP 连接?为什么在页面加载期间不重复使用单个 TCP 连接? 最佳答案 我认为浏览器通常会打开多个连接,以便它可以并行
我一直在谷歌搜索,只能找到 a trivial example Compute Capability 3.0 中的新动态并行性在其链接的其中一份技术简报中介绍 from here .我知道 HPC 专
我使用 Telerik 和 Microsoft CDN,分别用于它们各自的 AJAX 工具包。两者在 99% 的情况下都工作得很好。然而,我最近在两家不同的咖啡馆工作并访问了我的网站:第一家咖啡馆不允
我在一家从事网络托管的 IT 公司工作,而且我个人对 SQL 非常缺乏经验*。 *看起来很糟糕 我的一个客户正在尝试将 Epos 系统与其 magento 网站集成,在 Epos 集成过程中,他们遇到
我的代码现在有一个循环,它调用蒙特卡洛函数来计算多个样本的简单积分(y=x,从 0 到 1),并将总时间和积分值写入文本文件。然后循环增加线程数并继续前进。现在大约有 8 个线程,时间峰值约为 2.6
所以 HTTP/2 增加了我想要利用的性能。出于各种原因,我不喜欢连接我的 javascript,而 HTTP/2 无论如何都会使它变得不必要。 但是。我正在开发一个将部署在客户本地网络中的网络应用程
我写了一个非常简单的 Haskell 程序: main = print $ sum $ map read ["55", "99", "101"] 鉴于我过去的经验,我预计会得到一个“歧义类型”错误,因
我是一名优秀的程序员,十分优秀!