我有一个基于公共代码库项目的应用程序的两个版本。
库使用一些常量值来确定一些运行时配置,现在我希望每个应用程序的配置略有不同。
简化问题:我的库项目中有一个布尔字段,用于确定是否在我的应用中显示广告。默认情况下它是真的(如库项目中所定义),而App版本A则可以。但是我需要免费添加App版本B,所以我需要将该值设置为false。
如何实现这一点,以便我可以从引用库的项目中实质上覆盖库项目中的配置值?
我可以更改库实现和引用项目的实现。
修改
此外,配置布尔值仅影响库代码的行为。
答案 0 :(得分:1)
只需将变量封装在getter函数(getFoo())中,然后通过代码使用它。然后覆盖子类中的getter。
答案 1 :(得分:1)
其他选项包括从您的上下文中获取Android程序包名称并根据该名称做出决策,或从清单中提取一段元数据。
答案 2 :(得分:0)
在这种情况下,您不应该使用常量值。你应该做的是创建一个带有getter的抽象类,然后像这样扩展该接口:
public abstract class Config {
public abstract int getValue();
}
public class AppA extends Config {
private static final int value = 1;
@Override
public int getValue(){
return value;
}
}
public class AppB extends Config {
private static final int value = 2;
@Override
public int getValue(){
return value;
}
}
编辑:OP补充说他需要在他的库代码中配置值。我建议仍然使用此代码,但随后在库代码中添加一个setter,以从应用程序设置代码中获取此getter返回的值。