Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在具有不同基类的活动之间共享代码的最佳方式是什么?_Java_Android - Fatal编程技术网

Java 在具有不同基类的活动之间共享代码的最佳方式是什么?

Java 在具有不同基类的活动之间共享代码的最佳方式是什么?,java,android,Java,Android,我有以下问题: 我有一个抽象活动类,我们称之为MyAbstractActivity,它包含一些我想重用的代码(例如:标准服务绑定器、公共菜单项、公共初始化代码等)。通常,我只会使用它来对我的具体活动进行子类化,并完成它 但是,我偶尔需要使用另一个超类型,例如ListActivity或MapActivity 所以问题是:如果必须使用另一个基类,如何避免在活动中重复支持代码? 我已经想出了一个基于decorator模式的解决方案,就像这样: 但是,我发现这种方法存在一个问题: 如何处理受保护的方法

我有以下问题:
我有一个抽象活动类,我们称之为MyAbstractActivity,它包含一些我想重用的代码(例如:标准服务绑定器、公共菜单项、公共初始化代码等)。通常,我只会使用它来对我的具体活动进行子类化,并完成它

但是,我偶尔需要使用另一个超类型,例如ListActivity或MapActivity

所以问题是:如果必须使用另一个基类,如何避免在活动中重复支持代码? 我已经想出了一个基于decorator模式的解决方案,就像这样:

但是,我发现这种方法存在一个问题: 如何处理受保护的方法(如onCreate())?我是否应该引入一个额外的“bridge”类,将它们公开给装饰者,类似于下面介绍的方式(开始看起来有点拜占庭式

还有别的办法吗

我希望我说得比较清楚。提前感谢您的反馈


注:在我看来,使用静态实用程序类并不是一个好的解决方案,因为它可能会引入难以识别的编程错误。

如果我理解正确,无论是片段还是装饰器模式都不是干净的或适合于您想要完成的任务的解决方案。它们被设计用来解决其他问题

我发现自己正在将“支持”代码、或“框架”代码、或“所有那些冗长、重复、陈词滥调的废话”转移到静态实用程序方法。这不一定是我在非Android项目中采用的方法,但在我的Android项目中,它运行得非常好


另外,要知道,您不需要为ListView创建子类ListActivity。

很抱歉没有实际嵌入该图,它不会让我:p.我说在某个地方创建一些静态方法,并将您的
MyAbstractActivity
初始化绑定到这些静态方法。我目前正在用我的应用程序做这件事。我有大量的活动,这些活动都是父活动的子活动。我传递了很多额外的意图来跟踪我正在进行的活动,但问题是在这种情况下,我不能直接将MyAbstractActivity子类化,因为我需要将MapActivity子类化。这就是为什么您可以在其他父活动中访问这些公共静态方法。您将需要2个“抽象”活动,1个用于常规类型的活动,另一个用于包含地图的活动。这些活动中的每一个都将通过这些静态方法初始化自己,尽可能消除冗余哦,好吧-我以为你误解了我,对不起。我是否正确理解您的意思是在onCreate()等中调用这些静态方法。?在这种情况下,恐怕我的PS适用。我真的很想买一些不太容易引起错误的东西。嗯。。。对我来说,在Android活动上下文中使用静态实用程序类的问题在于:您必须记住应该在何处以及在哪些钩子中放置什么调用,即“这转到onCreate(),这转到onPause()等等”。对我来说,它真的最小化了代码重用的好处,增加了bug的风险。我知道您可以拥有一个没有ListActivity的ListView,但这只是一个示例。我意识到在这种情况下使用装饰器的风险,但我相信在我的开发案例中,副作用不会压倒好处。无论如何,谢谢你的回答。虽然你的回答中没有明确说明,但它让我想到在这种情况下使用片段并不是真正的前进方向——我引用片段应该是“一个模块化和可重用的组件”。使一个片段依赖于一个特定的活动类将无法达到这个目的。我将相应地编辑我的问题,并对你的答案进行投票(也就是说,如果我可以做后一项:)。再次感谢。