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:
La classe abstraite AtomicRecord, sous-class de la classe abstraite Record:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }
et, par example, la classe StringRecord
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
maintenant, je veux créer une table de records générique:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public class StringRecord extends AtomicRecord<String> { code doesn't matter. }
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>.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class RandomRecordAccessAppendableFileTable<RecordType extends Record>{ public final RecordType getRecord(long id) throws IOException { RecordType record = new RecordType(); } }
Y'a-t-il un moyen de faire ça?
Merci d'avance.
Partager