Расширяет и абстрактный вопрос

Я создаю общий класс под названием 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";
    }
}
Другие вопросы по тегам