IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Instancier une générique sous-classe d'une class abstraite


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Points : 17
    Points
    17
    Par défaut 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 : 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.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Pour ce que j'en vois de ton code

    1) StringRecord ne semble pas nécessaire, il est strictement identique à AtomicRecord<String> (sauf si évidement y a du code no relevant ici que t'a ajouté, là çà se justifierais)

    2) Pour ton RandomRecordAccessAppendableFileTable, il va falloir passer par un niveau intermédiare, malheureusement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public abstract class RandomRecordAccessAppendableFileTable<RecordType extends Record>{
        public abstract RecordType getRecord(long id) throws IOException;
    }
    public class MyClass extends RandomRecordAccessAppendableFileTable<StringRecord>{
        public StringRecord getRecord(long id) throws IOException{
            return new StringRecord();
        }
    }
    PS: la balise code, çà aide!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Merci
    J'espérais qu'il y ait la possibilité de ne pas passer par ça, c'est donc une limitation de Java si je comprend bien? Je ne pourrai jamais la contourner?

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/02/2013, 05h46
  2. class: modifier une var d'instance avec une méthode
    Par jean-pat dans le forum Général Python
    Réponses: 5
    Dernier message: 29/09/2011, 15h25
  3. Réponses: 14
    Dernier message: 10/09/2009, 19h08
  4. [DAO] Classes d'une appli et tables d'une BD
    Par vilcoy dans le forum Autres
    Réponses: 5
    Dernier message: 17/03/2007, 21h36
  5. Réponses: 13
    Dernier message: 23/06/2006, 12h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo