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

avec Java Discussion :

créer un objet à partir de lui-même


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Points : 66
    Points
    66
    Par défaut créer un objet à partir de lui-même
    Bonjour,

    Voilà le problème :

    J'ai une classe A qui étend File. J'aimerais la doter d'un constructeur A(File f) (constructeur qui ne fait, d'ailleurs, pas grand chose de plus que convertir l'objet f de classe File en classe A).

    Cependant, je me fais jeter par l'IDE parce que le constructeur File() n'existe pas.

    Bon, je comprends bien son problème, mais comment puis-je faire pour lui demander d'utiliser f comme base de mon nouvel objet?

    Bon, évidemment, super(f.toString()) marcherait, mais bon... Il doit bien y avoir quelque chose de plus élégant quand même, non?

    Même si cette solution fonctionne dans ce cas précis, je suis sûr que je re rencontrerai le problème dans des cas moins simples

    Merci de m'aider

  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
    vous ne pouvez pas prendre une instance d'une classe (ici f) et la "transformer" en la classe courante. En l'occurence ici, le mieux est d'appeler un constructeur de File() qui prenne en paramètre des données que vous récupérer de f.

    Quel est l'intérêt de sous-classer File au passage?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    Merci pour la réponse.

    J'ai étendu File pour lui ajouter une méthode qui renvoie les noms des fichiers contenu dans le dossier (si f est un dossier) et ayant une extension spécifique. En gros, un list() amélioré.

    J'aurais pas dû faire comme ça?

    D'ailleurs, tant qu'on en est à de l'esthétisme, je pensais ajouter à cette classe une procédure de chargement et d'enregistrement du fichier selon son extension. Est-ce que je devrais la mettre dans cette classe, ou plutôt créer une nouvelle classe contenant un File comme attribut?

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bomehc Voir le message
    Cependant, je me fais jeter par l'IDE parce que le constructeur File() n'existe pas.
    Sans message d'erreur exact ni le code exact ce n'est pas forcément évident de comprendre pourquoi "tu te fais jeter"...

    Citation Envoyé par bomehc Voir le message
    Bon, évidemment, super(f.toString()) marcherait, mais bon... Il doit bien y avoir quelque chose de plus élégant quand même, non?
    C'est l'appel au constructeur parent qui pose problème ?

    Citation Envoyé par bomehc Voir le message
    J'ai étendu File pour lui ajouter une méthode qui renvoie les noms des fichiers contenu dans le dossier (si f est un dossier) et ayant une extension spécifique. En gros, un list() amélioré.
    Heu... Pourquoi ne pas utiliser directement list(FilenameFilter) ?

    a++

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Sans message d'erreur exact ni le code exact ce n'est pas forcément évident de comprendre pourquoi "tu te fais jeter"...
    Le message d'erreur c'est "impossible de trouver le constructeur File() dans java.io.File"

    Citation Envoyé par adiGuba Voir le message
    C'est l'appel au constructeur parent qui pose problème ?
    D'après le message précédent, il semblerait. File n'a pas de constructeur ayant un File comme paramètre, du coup l'IDE tente de se rabattre vers le constructeur par défaut File(), mais comme il n'existe pas non plus, je l'ai dans l'os.

    Citation Envoyé par adiGuba Voir le message
    Heu... Pourquoi ne pas utiliser directement list(FilenameFilter) ?
    Je pense que le fait que je ne connaisse pas cette classe a dû jouer à un moment ou un autre. Très probablement ^^. Je vais utiliser ça du coup, ça me parait mieux.

    Merci pour tes réponses

  6. #6
    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
    Citation Envoyé par bomehc Voir le message
    L
    D'après le message précédent, il semblerait. File n'a pas de constructeur ayant un File comme paramètre, du coup l'IDE tente de se rabattre vers le constructeur par défaut File(), mais comme il n'existe pas non plus, je l'ai dans l'os.
    L'IDE n'a rien à voir dans l'histoire. Et java n'essaie jamais d'utiliser le constructeur parent prenant un File. Quand vous n'appelez pas un constructeur explicite du parent, en java, utilise toujours le constructeur par défaut du parent, qui est celui ne prenant pas de paramètre. Comme File n'a pas de constructeur par défaut, toute classer héritant de File devra avoir un constructeur explicite déléguant explicitement à un des constructeurs de File

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Points : 66
    Points
    66
    Par défaut
    Oui oui, pardon si je me suis mal exprimé, je ne reprochais rien à l'IDE en particulier, j'ai bien compris que le problème était simplement souligné par l'IDE.

    Bon, du coup, va pour un super(f.toString());

    Merci

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

Discussions similaires

  1. Papervision3D : créer un objet à partir de primitives
    Par ttone dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 05/12/2008, 00h42
  2. créer un objet à partir du type d'une collection
    Par dams78 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 03/11/2008, 14h08
  3. [POO] Objet se renvoyant lui-même en php5
    Par stailer dans le forum Langage
    Réponses: 10
    Dernier message: 19/09/2007, 03h42
  4. Réponses: 2
    Dernier message: 14/09/2007, 10h18
  5. Réponses: 2
    Dernier message: 30/01/2007, 09h02

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