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 : 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();
}
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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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();
	}
}
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.