Расширяет и абстрактный вопрос
Я создаю общий класс под названием GeneraFriendsTable
код вроде этого:
public abstract class GeneralFriendsTable {
public static String TABLE_NAME;
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAME = "name";
public static void onCreate(SQLiteDatabase db) {
String DATABASE_CREATE = "CREATE TABLE " + TABLE_NAME + "(" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_UNAME + " TEXT, " + ");";
db.execSQL(DATABASE_CREATE);
}
public static void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
}
}
Я хочу при расширении из этого класса принудительно инициализировать поле TABLE_NAME
,
например:
public class NewFriendsTable extends GeneralFriendsTable {
public static final String TABLE_NAME = "leaved_friends";
}
Главный вопрос: будет onCreate()
работать правильно, используя TABLE_NAME
в расширенном классе?
1 ответ
Решение
Создайте абстрактную функцию в суперклассе, чтобы получить имя таблицы:
public abstract class GeneralFriendsTable {
public abstract String getTableName();
public static void onCreate(SQLiteDatabase db) {
String DATABASE_CREATE = "CREATE TABLE " + getTableName() + ...
}
}
Затем реализуйте функцию в конкретных подклассах:
public class NewFriendsTable extends GeneralFriendsTable {
public String getTableName() {
return "leaved_friends";
}
}