У меня есть абстрактный класс записи, который представляет записи базы данных, которые имеют два абстрактных метода: getTable() и getColumns(). Затем у меня есть класс Customer, который расширяет Record и я реализую эти абстрактные методы в этом классе.java - создавать экземпляры объектов из абстрактного класса
Я пытаюсь выяснить, как я могу получить список всех Клиентов, но сохраните метод как можно многократно используемый, поэтому я бы предпочел метод getAllRecords (Record record), чем метод getAllCustomers().
Вот что у меня есть. Я не могу создать новую запись() объект, потому что это абстрактно и нужно создать экземпляр класса, который был принят в.
//i'd like to do something like this to get all of the Customers in the db
// datasource.getAllRecords(new Customer());
public List<Record> getAllRecords(Record record) {
List<Record> records = new ArrayList<Record>();
Cursor cursor = database.query(record.getTable(),
record.getColumns(), null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Record record = cursorToRecord(cursor, record);
records.add(record);
cursor.moveToNext();
}
// Make sure to close the cursor
cursor.close();
return records;
}
private Record cursorToRecord(Cursor cursor, Record record) {
Record record = new Record(); <-- somehow clone a new instance of the record that was passed in
record.setId(cursor.getLong(0));
record.setValue("aKey",cursor.getString(1));
return record;
}
бы, имеющие какой-то RecordRegistry объект имеют смысл, а не имеющие отдельные фабричные классы для каждого подкласса Record?
class RecordRegistry{
private static final List<Record> RECORDS;
static {
final List<Record> records = new ArrayList<Record>();
records.add(new Customer());
records.add(new Company());
RECORDS = Collections.unmodifiableList(records);
}
public List<Record> allRecords(){
return RECORDS;
}
public Record buildRecord(Class cClass){
String className = cClass.getName().toString();
if(className.equalsIgnoreCase("customer")){
return new Customer();
}else if(className.equalsIgnoreCase("company")){
return new Company();
}
return null;
}
}
Есть ли дети из класса Record, которые могут быть созданы? – Egor
Клиент - это класс, который расширяет запись и может быть создан, да. – David