【问题标题】:BuildConfigField to decide how to define the member (enum)BuildConfigField 决定如何定义成员(枚举)
【发布时间】:2019-08-20 10:16:17
【问题描述】:

build.gradle(模块):

productFlavors {
    mytest {
        ...
        buildConfigField "boolean", "SHORT_ENUM", "false"
    }
    mysecondtest {
        buildConfigField "boolean", "SHORT_ENUM", "true"
    }

在 MyClass 中,我想根据我定义的 buildConfigField 在构建期间定义枚举成员:

public class MyClass {
    // members initialization
    public enum MYENUM {
        if (BuildConfig.SHORT_ENUM) {
            FIRST(0),
            SECOND(1);
        }
        else { // SHORT_ENUM is false
            FIRST(0),
            SECOND(1),
            THIRD(2),
            FORTH(3);
        }
        private int value;
        MYENUM(int v) {
            value = v;
        }
    }
    ....
}

但它不起作用。有可能做我想做的事吗?如果是,那么如何?

【问题讨论】:

  • 只是一个问题,但是根据您的示例,为什么不将其存储为 boolean ?还是您特别想存储和检索枚举?
  • 但是我将如何根据布尔值定义枚举?能给我看看吗?
  • 如果你想要枚举的动态值,你可以创建泛型函数,它会根据这个条件返回类型。

标签: java android build.gradle android-build android-buildconfig


【解决方案1】:

您不能只在类定义中编写 if 语句。

Java 中没有 ifdef 和 ifndef。

您可以为每种产品风格创建 java 代码文件夹,然后在每个文件夹中正确创建枚举定义。

示例:
app/src/debug/java/my/package/MyEnum.java
app/src/beta/java/my/package/MyEnum.java

然后,当你构建debug时,它将使用调试版本,如果你构建beta,它将使用beta版本。

【讨论】:

    【解决方案2】:

    在这种情况下,BuildConfig.SHORT_ENUMboolean

    随便用

    if (BuildConfig.SHORT_ENUM){
      ...
    }
    

    在任何情况下,您都不能这样做以这种方式。 这取决于您想如何使用它们。你有很多选择:

    • 您可以在不同的 buildTypes 中使用 2 个不同的类。
    • 只需创建一个根据条件返回值的方法

    【讨论】:

    • 我根据你的回答编辑了这个问题,但它没有编译,因为我猜我在成员初始化期间使用了 if(BuildConfig.SHORT_ENUM)。
    • 对不起,我没看清楚你的问题。你不能用这种方式定义枚举
    • 谢谢。那么有没有解决办法?对于每个项目,我想以不同的方式定义成员。也许有办法使用 ifdef 和 ifndef?
    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多