我的项目中有(java类的)包。需要根据某些要求删除。 我必须将我的项目编译为目标
高端
和
低端
需求限制
- 包裹需要在Highend中存在,不应该在那里用于低端。
- 我的代码库对于两个目标都是相同的
醇>
为了实现这一要求,我想要一种定义方式
class myclass{
static final boolean isEnable = false;
public void API1(){
if(isEnabled){
//function logic
}
}
public boolean API2(){
if(isEnabled){
//function logic
//return value
}
else
return false;
}
}
虽然"静态决赛"私有变量提供了一个减少我的类大小的解决方案,因为isEnabled代码是false。编译器从编译的类中删除字节码。但是使用它我认为它不会解决我的问题,它减少了低端目标的类大小但是函数持久化返回一些默认值。 有没有更好的方法或设计模式来解决这个问题,因为当前的解决方案我必须对包中存在的类的所有API进行更改,虽然我必须删除所有完整的包。
此要求与Android中的java包相关,因此我将其包含在标签
中的Android中答案 0 :(得分:0)
您可能希望重新构建代码,以便API2
包含在一个在低端版本中完全消除的类中。此外,由于API2
的调用者在下端版本中没有得到合理的答案,您也可以消除API2
内部的测试。我的意思是以下
API2
isEnabled
检查虽然这对我来说听起来不错,但请注意,这只是一个设计目标,不要过于努力地遵循它,这样你就不会以一些疯狂的设计结束。如果有几十isEnabled
次检查,那么您(可能)做错了。
您可能还希望使用由高端实现(如
)覆盖的简单低端实现class LowendSomething {
boolean doFancyStuff() {
throw new BuyTheHighendVersionException();
}
}
class HighendSomething {
boolean doFancyStuff() {
... do fancy stuff
}
}
和
这样的行一起LowendSomething something =
isEnabled ? new HighendSomething() : new LowendSomething();