【发布时间】:2015-05-19 10:01:06
【问题描述】:
不久前,我在我的 Android 应用程序中创建了一个 SQLiteHelper 类。我不是 100% 确定为什么,但是表名和列名是嵌套的公共静态抽象类中的公共静态最终字段。我记得,目标是保护字段不被修改。这一切都很好,但是我的应用程序开始变得复杂,我想用公共静态最终表和列名字段填充其他类中的字段。经过反复试验,阅读了抽象类、静态类和嵌套类,我突然想到可以直接调用该字段,如下所示。
String myTable = MySQLiteHelper.dbFields.TABLE_NAME_REMINDER;
尽管我已经阅读了这些主题,但在我的具体案例中它们是如何结合在一起的,仍然让我摸不着头脑。所以我的问题是,既然字段是静态最终的,嵌套字段是否真的提供了额外的保护,如果嵌套类是静态的,为什么还要让它抽象呢?是否需要 static AND abstract 直接调用而不需要实例化外部和嵌套类?
感谢您的帮助。我真的很想了解各种类的实现。
这是该类的关键元素:
public class MySQLiteHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "Reminders.db";
private static final int DATABASE_VERSION = 5;
public int DatabaseVersion = DATABASE_VERSION;
public MySQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public static abstract class dbFields implements BaseColumns {
//dbFields Table Fields
public static final String TABLE_NAME_REMINDER = "reminders";
public static final String COLUMN_REMINDER_ID = _ID;
public static final String COLUMN_REMINDER = "reminder";
public static final String COLUMN_REMINDER_ALTITUDE = "altitude";
public static final String COLUMN_REMINDER_USED = "is_used";
public static final String COLUMN_REMINDER_LASTUSED = "last_used";
public static final String COLUMN_REMINDER_ACTION = "action";
public static final String COLUMN_REMINDER_SCORE = "score";
public static final String COLUMN_REMINDER_RELATIONSHIP = "relationship";
//Special_Days Table Fields
public static final String TABLE_NAME_SPECIAL_DAYS = "special_days";
public static final String COLUMN_SPECIAL_DAYS_ID = _ID;
public static final String COLUMN_SPECIAL_DAYS_DATE = "date"; //dbDataRow strField 1
public static final String COLUMN_SPECIAL_DAYS_NAME = "name"; //dbDataRow dbData
public static final String COLUMN_SPECIAL_DAYS_ALTITUDE = "altitude"; //dbDataRow intField 1
public static final String COLUMN_SPECIAL_DAYS_USED = "is_used"; //dbDataRow Field 2
public static final String COLUMN_SPECIAL_DAYS_WARNING = "warning"; //dbDataRow intField 3
public static final String COLUMN_SPECIAL_DAYS_ACTION = "action"; //dbDataRow intField 4
}
}
【问题讨论】:
标签: java android oop android-sqlite abstract-class