Java 扩展类时的If条件
在Android应用程序中。我有一个要求,我有我的Java 扩展类时的If条件,java,android,class,android-activity,Java,Android,Class,Android Activity,在Android应用程序中。我有一个要求,我有我的HomeActivity(有18000行代码),如果我的设备支持ARCore,我希望HomeActivity扩展为ARBaseACtivity,如果设备不支持ARCore,那么我需要它扩展为非ARBaseACtivity 我正在启动屏幕中检查此情况 现在,有一种方法,首先是我做两个活动,一个相同的HomeActivity,但我需要知道有没有更好的方法来做。因为我不想每次在家庭活动中做任何更改时都进行复制 请在下面发表评论,以便我能改进我的错误。谢
HomeActivity
(有18000行代码),如果我的设备支持ARCore
,我希望HomeActivity
扩展为ARBaseACtivity
,如果设备不支持ARCore
,那么我需要它扩展为非ARBaseACtivity
我正在启动屏幕中检查此情况
现在,有一种方法,首先是我做两个活动,一个相同的HomeActivity
,但我需要知道有没有更好的方法来做。因为我不想每次在家庭活动
中做任何更改时都进行复制
请在下面发表评论,以便我能改进我的错误。谢谢 技术上的答案是:不可能 在Java中,继承结构是固定的。让一个C类在一个上下文中扩展类A,而让另一个上下文中扩展类B是不可能的。当你想这样做的时候,你会得到两个类,C1和C2 当然,真正的答案是:您必须后退一步,明确地构建您的整个解决方案。单是18K线就意味着这里有严重的问题。有人可能会提到好的老原则,但是:18K行代码意味着很多代码和特性。在stackoverflow问题上,一个单一的答案根本不可能为您提供正确的指导
所以,固执己见:你应该退后一步,找一些(架构)专家谈谈。然后和他们坐下来(可能几个小时,甚至几天),看看你有什么,你想去哪里。然后在那个条路上一起工作。其他任何事情都只是在症状上贴上创可贴。当然,如果你不这样做,什么都不会坏。但每向前一步都会让事情变得一团糟,让每一步都变得更昂贵。迟早,改变你的巨石将变得几乎不可能,每个人都会要求“扔掉它,从头开始” 技术上的答案是:不可能 在Java中,继承结构是固定的。让一个C类在一个上下文中扩展类A,而让另一个上下文中扩展类B是不可能的。当你想这样做的时候,你会得到两个类,C1和C2 当然,真正的答案是:您必须后退一步,明确地构建您的整个解决方案。单是18K线就意味着这里有严重的问题。有人可能会提到好的老原则,但是:18K行代码意味着很多代码和特性。在stackoverflow问题上,一个单一的答案根本不可能为您提供正确的指导
所以,固执己见:你应该退后一步,找一些(架构)专家谈谈。然后和他们坐下来(可能几个小时,甚至几天),看看你有什么,你想去哪里。然后在那个条路上一起工作。其他任何事情都只是在症状上贴上创可贴。当然,如果你不这样做,什么都不会坏。但每向前一步都会让事情变得一团糟,让每一步都变得更昂贵。迟早,改变你的巨石将变得几乎不可能,每个人都会要求“扔掉它,从头开始” > P>作为GhostCat优秀答案的补充,我将在OOP中给出一个非常重要的提示:为了增强<强>运行时< /强>对象的行为,装饰器模式通常是一种考虑的方式。p> 这里,
HomeActivity
显示为装饰元素,ARBaseACtivity
和NonARBaseActivity
显示为装饰元素。您应该定义一个
MyActivity
接口,它是修饰对象和装饰对象的基类
因此,事情并不简单,因为您将不得不重构许多代码行,但这将使您的设计更加灵活,并且使用具有一致责任的类,而不是使用god对象作为活动
最后,在启动屏幕中,您可以定义一个方法,该方法根据检测到的客户端材料返回装饰HomeActivity
的活动:
public MyActivity computeHomeActivity(){
HomeActivity activity = new HomeActivity();
if (isSupportARCore()){
return new ARBaseACtivity(activity);
}
return new NonARBaseActivity(activity);
}
作为GhostCat优秀答案的补充,我将在OOP中给出一个非常重要的提示:为了增强<强>运行时< /强>对象的行为,装饰器模式通常是一种考虑的方式。 这里,
HomeActivity
显示为装饰元素,ARBaseACtivity
和NonARBaseActivity
显示为装饰元素。您应该定义一个
MyActivity
接口,它是修饰对象和装饰对象的基类
因此,事情并不简单,因为您将不得不重构许多代码行,但这将使您的设计更加灵活,并且使用具有一致责任的类,而不是使用god对象作为活动
最后,在启动屏幕中,您可以定义一个方法,该方法根据检测到的客户端材料返回装饰HomeActivity
的活动:
public MyActivity computeHomeActivity(){
HomeActivity activity = new HomeActivity();
if (isSupportARCore()){
return new ARBaseACtivity(activity);
}
return new NonARBaseActivity(activity);
}
如果类具有不同的行为,则需要创建两个类。但是尝试将继承类中的所有公共代码共同化如果它们有不同的行为,则需要创建两个类。但是试着将继承类中的所有公共代码共同化是的,你是对的,从一开始我没有遵循任何体系结构,现在已经1.5年了,需求就像我必须在一个活动中完成所有事情,现在看起来很混乱。我必须遵循一些架构并进行一些优化。无论如何,谢谢你的回答!!是的,你是对的,从一开始我没有遵循任何架构,现在已经1.5年了,要求我必须在一个活动中完成所有事情,现在看起来一团糟。我必须遵循一些架构并进行一些优化。任何