Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 定义应用程序中使用的常量的最佳实践_Java_Android_Constants - Fatal编程技术网

Java 定义应用程序中使用的常量的最佳实践

Java 定义应用程序中使用的常量的最佳实践,java,android,constants,Java,Android,Constants,我在声明连接查询的提供程序包中有一个ContentProvider: final String ALL_DATA_FOR_AN_ANIMAL = "SELECT " + "animals._id, " + COLUMN_NAME + " AS _name, " + COLUMN_CLASSE + " AS _class, " + "IFNULL(" + COLUMN_OVERRIDE_INDIVIDU_NUMBER + ", " +

我在声明连接查询的提供程序包中有一个ContentProvider:

final String ALL_DATA_FOR_AN_ANIMAL = "SELECT " +
        "animals._id, "
        + COLUMN_NAME + " AS _name, "
        + COLUMN_CLASSE + " AS _class, "
        + "IFNULL(" + COLUMN_OVERRIDE_INDIVIDU_NUMBER + ", " +  COLUMN_INDIVIDU_NUMBER + ")"  + " AS _ind_nb, "
        + "FROM " + ANIMALS_TABLE_NAME + " LEFT JOIN " + ANIMALS_OVERRIDE_TABLE_NAME
        + " ON " + COLUMN_NAME + " = " + COLUMN_OVERRIDE_NAME
        + " WHERE animals._id = ?";
使用AS定义的所有sql别名都在操作包的ContentResolver中使用,以定义传递给ContentProvider中查询的投影和选择

String[] projection = new String[]{"_name", "_class", "_ind_nb", "_in_danger"};
String selection = "_id";
String[] selectionArgs = {selectionArg};

return mCr.query(uri, projection, selection, selectionArgs, sortOrder);
最后,别名用于在视图包中显示查询结果

我认为最好在Constants类中定义别名,而不是使用硬编码字符串,但我已经在包ui.utils中为ui声明了一些常量

最佳实践是什么?为整个应用程序编写一个Constants类pro包还是编写一个Constants类更好。。或者通过不同的包使用这些别名是糟糕架构的标志

更新

下面是我为gui实现的常量类,该类位于package view.utils中

我会对别名做同样的处理,比如:

public class Constants {
    public static final String ALIAS_ID = "_id";
    public static final String ALIAS_NAME = "_name";
    //...
}
问题是:

在不同的包之间共享变量(特别是别名)是一个好的解决方案吗? 若第一个问题的答案是肯定的,那个么我是否必须像类一样创建多个常量,或者为单个常量类中的所有包定义所有常量是一种好的做法?
有一件事我忘了说,我定义了一个类契约,其中定义了所有表。正如@Sourabh所建议的,我使用这个类来定义连接查询所需的常量

public static final class JoinEntry implements BaseColumns {

    public static final String COLUMN_JOIN_NAME = "_name";
    public static final String COLUMN_JOIN_CLASS = "_class";
    public static final String COLUMN_JOIN_SUB_CLASS = "_sub_class";
    public static final String COLUMN_JOIN_NB_IND = "_ind_nb";
}

是否要使用不可编辑的字符串?如果是,请将其设置为final。public static final String…您可以编写一个包含所有列名和方法的提供程序协定,以为您的提供程序生成URI,并使用或类似于生成queriescursor.getStringcursor.getColumnIndex\u名称的内容听起来像cursor.getString\u名称或cursor.getStringXXX\u名称,其更安全的替代方法是record.getName。这个问题可能对您有帮助。这应该是对原始问题的编辑,而不是答案。而且肯定不应该是被接受的答案,因为它实际上没有回答任何问题。
public class Constants {
    public static final String ALIAS_ID = "_id";
    public static final String ALIAS_NAME = "_name";
    //...
}
public static final class JoinEntry implements BaseColumns {

    public static final String COLUMN_JOIN_NAME = "_name";
    public static final String COLUMN_JOIN_CLASS = "_class";
    public static final String COLUMN_JOIN_SUB_CLASS = "_sub_class";
    public static final String COLUMN_JOIN_NB_IND = "_ind_nb";
}