如何在java中创建“可重写”配置?

时间:2011-05-17 20:35:22

标签: java android override

我有一个基于公共代码库项目的应用程序的两个版本。

库使用一些常量值来确定一些运行时配置,现在我希望每个应用程序的配置略有不同。

简化问题:我的库项目中有一个布尔字段,用于确定是否在我的应用中显示广告。默认情况下它是真的(如库项目中所定义),而App版本A则可以。但是我需要免费添加App版本B,所以我需要将该值设置为false。

如何实现这一点,以便我可以从引用库的项目中实质上覆盖库项目中的配置值?

我可以更改库实现和引用项目的实现。

修改

此外,配置布尔值仅影响库代码的行为。

3 个答案:

答案 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返回的值。