Instancier une générique sous-classe d'une class abstraite
Bonjour,
J'écris un petit file manager pour mon application, organisé comme une database: un table remplie de records.
Je voudrais que ma table soit capable de manipuler différents types de records (mais un seul type par table!), j'ai donc cette hiérarchie:
la classe abstraite Record:
Code:
1 2 3 4 5 6 7 8 9 10 11
| public abstract class Record {
public Record() {
}
public abstract void readFrom(DataInput in, int length) throws IOException;
public abstract void writeTo(DataOutput out) throws IOException;
public abstract int prepareToWrite();
} |
La classe abstraite AtomicRecord, sous-class de la classe abstraite Record:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public abstract class AtomicRecord<T> extends Record {
public AtomicRecord() {
}
public AtomicRecord(T value) {
super();
}
public abstract T getValue();
public abstract void setValue(T value);
} |
et, par example, la classe StringRecord
Code:
1 2 3
| public class StringRecord extends AtomicRecord<String> {
code doesn't matter.
} |
maintenant, je veux créer une table de records générique:
Code:
1 2 3 4 5
| public class RandomRecordAccessAppendableFileTable<RecordType extends Record>{
public final RecordType getRecord(long id) throws IOException {
RecordType record = new RecordType();
}
} |
Problème: RecordType n'est évidemment pas instanciable, car il extends Record, et non StringRecord ou TrucRecord. Mais j'aimerais tout de même instancier un nouveau StringRecord dans une classe RandomRecordAccessAppendableFileTable<StringRecord> et un nouveau TrucRecord dans une classe RandomRecordAccessAppendableFileTable<TrucRecord>.
Y'a-t-il un moyen de faire ça?
Merci d'avance.